Java if语句
Javaif
语句使Java程序可以根据变量的状态或者方法返回的值来决定执行什么代码。这是一个简单的Javaif
示例:
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为true,我必须增加一个有效的计数器。天真的,我可能会将代码更改为此:
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"); }
当方括号放在那里时,更容易记住在方括号内插入新语句。
条件运算符
Java有一组可以使用的条件运算符,它们的值可以为true或者false。这些是:
==
!=
<
<=
>
> =
" =="运算符测试两个值是否相等。例如:
long var1 = 2; long var2 = 5; if(var1 == var2) { //... }
如果两个变量var1和var2相等,则表达式var1 == var2被评估为true。否则,表达式的计算结果为" false"。
!=
运算符与==
运算符完全相反。如果两个变量不相等,则表达式的计算结果为" true"。如果两个变量相等,则表达式的计算结果为" false"。
如果运算符左侧的变量小于运算符右侧的变量,则将<<运算符评估为" true"。如果left变量等于或者更大,则表达式的计算结果为" 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)方法的输出是否为true或者false。
其次,在isValid()方法内部,使用String.equals()方法来测试与某个字符串值的相等性。这是测试它的if
语句:
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
对象,而是指向空对象),则该版本不会导致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 { //... } } }
如我们所见,第一个版本实际上更易于阅读。这是我通常必须始终将" if"和" else"的语句嵌入方括号中的规则的一个例外。在这种情况下,我更喜欢第一个版本。它更易于读取,写入,并且通常不会导致编程错误。