public static void main(String args[]){
String s = null;
if(false && false || s.equalsIgnoreCase("x")) { //throws an exception
System.out.println("true");
} else {
System.out.println("false");
}
}
我本来以为会遇到假短路,但事实并非如此。 这是为什么?我认为如果你有一个错误,则无需继续下一个&&。 请帮助我理解。
最佳答案
&&
operator has higher precedence than the ||
operator 。所以,条件相当于
if( (false && false) || s.equalsIgnoreCase("x")) { //throws an exception
然后评估离开:
if(false || s.equalsIgnoreCase("x")) { //throws an exception
不会短路。要使其短路,请使用括号:
if(false && (false || s.equalsIgnoreCase("x"))) { // fine
关于java - 为什么这样不会短路呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21175835/