if 语句
Java if语句使Java程序可以根据变量的状态或从方法返回的值来决定执行什么代码。下面是一个简单的例子:
boolean isValid = true;
if ( isValid ) {
System.out.println("it is valid");
} else {
System.out.println("it is not valid");
}
这个例子中的if语句检查布尔变量isValid,并根据其值(true或false)执行两个不同的代码块中的一个。如果isValid变量的值为true,则执行第一个块。否则,执行else块内的代码。
括号内的表达式称为条件。条件可以是任何Java表达式,只要表达式的结果是布尔结果(true或false)。
在上面的例子中,条件是isValid变量是true还是false。
如果要执行的代码块只是一个语句,那么在if语句中就不需要括号{}。示例如下:
if ( isValid ) System.out.println("it is valid");
else System.out.println("it is not valid");
但是,即使只有一条语句执行,在这条语句前后分别加上括号也是一种好习惯。通常在开发过程中,开始时你可能只需要在if或else块内执行一条语句,但后来可能不得不添加更多的语句。这时可能会导致以下难以发现的错误。看如下if语句:
if( isValid)
System.out.println("it is valid");
现在想象一下,如果isValid为真,我必须增加一个有效的计数器。天真地我可能会改变这个代码:
if( isValid)
validCount++;
System.out.println("it is valid");
但是现在只有validCount ++语句属于if语句。 System.out.println()语句将始终执行。或者,想象一下,如果我调换了两条语句的顺序:
if( isValid)
System.out.println("it is valid");
validCount++;
现在只有System.out.println()语句属于if语句。 validCount ++语句将始终执行。
为了避免这个错误,即使在块中只有一条语句要执行,我也几乎总是在块的周围放置括号。看起来就像下面这样:
if ( isValid ) { System.out.println("it is valid"); }
else { System.out.println("it is not valid"); }
当括号出现在if或else后面时,更容易记住在括号里面插入新的语句。
条件操作符
Java有一组可以使用的条件运算符,它们的运算结果是true或false。
- ==
- !=
- <
- <=
- >
=
==操作符是用来判断两个值是否相等的。示例如下:
long var1 = 2;
long var2 = 5;
if(var1 == var2) {
//...
}
如果两个变量var1和var2相等,则表达式var1 == var2的计算结果为true。否则,表达式结果为false。
!=运算符与==运算符完全相反。如果两个变量不相等,则表达式结果为true。如果两个变量相等,则表达式结果为false。
如果运算符左侧的变量小于运算符右侧的变量,则<运算符的计算结果为true。如果左变量等于或大于,则表达式认为为false。示例如下:
if(var1 < var2) {
//...
}
<=运算符的工作方式与<运算符相似,但如果两个变量彼此相等,则它的计算结果为true,否则计算结果为false。
>运算符与<运算符完全相反。如果运算符左侧的变量大于运算符右侧的变量,则运算符表达式的计算结果为true,否则计算结果为false。下面是一个简单的例子:
if(var1 > var2) {
//...
}
>=运算符的工作方式与>运算符相似,但如果两个变量彼此相等,则它的计算结果为true。
变量与常量比较大小
在本文前面的例子中,我只展示了常量与常量的比较,或变量与变量的比较。但是,你也可以将常量与变量进行比较。下面有两个例子:
int var1 = 50;
if(var1 > 10) {
//...
}
if(99 <= var1) {
//...
}
方法作为判断条件
你也可以在if语句中使用方法的返回值作为条件。示例如下:
public void methodOne (String input) {
if ( isValid(input) ) {
System.out.println(input + " is valid");
} else {
System.out.println(input + " is not valid");
}
}
public boolean isValid(String value) {
if( value.equals("123") ) {
return true;
}
return false;
}
这个例子实际上包含两个if语句,其中方法是条件的。首先是
if( isValid(input) )
它测试isValid(input)方法的输出结果是否为真或假。
其次,在isValid()方法内,String.equals()方法用于测试是否等于某个字符串值。
if( value.equals("123") ) {
isValid()方法实际上可以用更短的方式书写。参考下面的代码:
public boolean isValid(String value) {
return value.equals("123");
}
现在,isValid()方法返回由value.equals()方法调用返回的值。
你也可以在语句中调换字符串“123”和value变量的位置,如下所示:
public boolean isValid(String value) {
return "123".equals(value);
}
这样写实际上有一个好处,即如果value为null(不指向一个String对象,而是指向Nothing),这不会导致NullPointerException异常。
多个if判断语句
你可以使用多个if语句来创建决策树。示例如下:
if( name.equals("john")) {
//...
} else if ( name.equals("jane")) {
//...
} else if ( name.equals("Linda")) {
//...
} else {
//...
}
在上面的例子中,else if语句被链接在一起。实际上,这个链接的if语句只是一个else语句中执行的if语句,如果没有括号{},上面的代码实际上相当于这个:
if( name.equals("john")) {
//...
} else {
if ( name.equals("jane")) {
//...
} else {
if ( name.equals("Linda")) {
//...
} else {
//...
}
}
}
正如你所看到的,第一个版本实际上更容易阅读。在这种情况下,我更喜欢第一个版本。它更容易阅读和书写,而且通常不会导致编程错误。
下一篇:Switch语句