两个条件运算符&&和|| 根据
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html进行短路,这意味着第二个操作数有时不需要进行评估.
有人可以提供一个示例,其中条件OR(||)运算符将被短路?
使用条件AND(&&)运算符时,短路行为非常简单:
如果(false &&(1> 0))则第二个操作数:(1> 0)不需要被评估,但似乎无法找到/想到条件OR的示例.
Ada*_*cin 18
当第一个操作数为真时,或运算符被短路.所以,
String foo = null;
if (true || foo.equals("")) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
不投掷NullPointerException.
正如@prajeesh在评论中正确指出的那样,在实际代码中使用短路的方式是防止NullPointerException每当你处理可能返回null的API时.因此,例如,如果有一个readStringFromConsole方法返回当前可用的字符串,或者如果用户没有输入任何内容,则返回null,我们可以编写
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
Run Code Online (Sandbox Code Playgroud)
作为旁注,返回用户输入的API应该在用户未键入任何内容时返回空字符串,并且不应返回null.返回null是一种说"没有任何可用"的方式,而返回空字符串是一种说"用户没有输入任何内容"的方式,因此是首选.