条件OR算子的短路行为(||)
条件运算符 && 和 ||根据
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html 短路,这意味着有时不需要评估第二个操作数。
有人可以举个例子,其中条件-OR(||)运算符将被短路吗?
使用条件 AND(&&) 运算符时,短路行为非常简单,如下所示:
if(false && (1 > 0)) 则第二个操作数:(1 >0) 不需要计算,但似乎找不到/想到条件 OR 的示例。
条件运算符 && 和 ||根据
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html 短路,这意味着有时不需要评估第二个操作数。
有人可以举个例子,其中条件-OR(||)运算符将被短路吗?
使用条件 AND(&&) 运算符时,短路行为非常简单,如下所示:
if(false && (1 > 0)) 则第二个操作数:(1 >0) 不需要计算,但似乎找不到/想到条件 OR 的示例。
当第一个操作数为真时,or 运算符短路。VoI
String foo = null;
if (true || foo.equals("")) {
// ...
}
不会抛出 .NullPointerException
正如@prajeesh在注释中正确指出的那样,在实际代码中使用短路的方式是防止在处理可能返回null的API时。因此,例如,如果有一个方法返回当前可用的字符串或null(如果用户不键入任何内容),我们可以编写NullPointerException
readStringFromConsole
String username = readStringFromConsole();
while (username == null || username.length() == 0) {
// No NullPointerException on the while clause because the length() call
// will only be made if username is not null
System.out.println("Please enter a non-blank name");
username = readStringFromConsole();
}
// Now do something useful with username, which is non-null and of nonzero length
作为旁注,每当用户不键入任何内容时,返回用户输入的 API 都应返回空字符串,并且不应返回 null。返回 null 是表示“没有可用内容”的一种方式,而返回空字符串是表示“用户未键入任何内容”的一种方式,因此是首选。
if(true || (0 > 1))
第一个陈述是正确的,因此没有必要评估第二个陈述。