条件OR运算符的短路行为(||)

两个条件运算符&&和|| 按照短路进行短路
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html ,这意味着有时不需要评估第二个操作数。

有人可以提供一个示例,其中条件OR(||)运算符将被短路?

使用条件AND(&&)运算符时,短路行为非常简单:

如果(false &&(1> 0))则第二个操作数:(1> 0)不需要被评估,但似乎无法找到/想到条件OR的示例。

当第一个操作数为真时,或运算符被短路。 所以,

 String foo = null; if (true || foo.equals("")) { // ... } 

不会抛出NullPointerException

正如@prajeesh在评论中正确指出的那样,在实际代码中使用短路的方法是在处理可能返回null的API时防止NullPointerException 。 因此,例如,如果有一个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 

作为旁注,返回用户输入的API应该在用户未键入任何内容时返回空字符串,并且不应返回null。 返回null是一种说“没有任何可用”的方式,而返回空字符串是一种说“用户没有输入任何内容”的方式,因此是首选。

 if(true || (0 > 1)) 

第一个陈述是正确的,因此没有必要评估第二个。

 if (true || comparison) 

比较永远不会被评估,因为它的结果是无关紧要的(因为第一个参数已经是真的)。