为什么&=操作符与&&不一样
我只是好奇java是如何工作的。 有人可以解释为什么在案例1中调用getBoolean
而在案例2中不调用?
public class Main {
public static void main(String[] args) {
System.out.println("---------- Case 1 ----------");
boolean b = false;
b &= getBoolean(true);
System.out.println("---------- Case 2 ----------");
b = false;
b = b && getBoolean(true);
}
private static boolean getBoolean(boolean bool) {
System.out.println("getBoolean(" + bool + ") was calledn");
return bool;
}
}
输出:
---------- Case 1 ----------
getBoolean(true) was called
---------- Case 2 ----------
b &= a
是b = b & a
的快捷方式,而不是b = b && a
这是因为&
和&&
运营商的区别。
&
运算符总是评估条件的两边。
&&
操作符仅在需要时评估第二个。
所以, getBoolean(true)
将不会在getBoolean(true)
情况下运行。
在情况2中getBoolean(true);
不会被评估,因为&&
是一个短路操作符,例如,如果表达式为false
则停止评估
情况1只是将getBoolean()
方法的结果设置为b
变量。
更新,感谢@KisHan:
请注意, b &= a
等于b = b & a
而不是b = b && a
在第二种情况下b
是false
和&&
如果第一个条件是假的也不会前进。
b = b && getBoolean(true);//b is false
因此&&
(逻辑与)首先检查操作的左侧,如果它是true
,则continues
到右侧。
而&
(按位与)运算符评估表达式的两边,因为它是按位AND运算符。它在左侧和右侧之间执行AND操作。
所以在第一种情况下会是
b = b & getBoolean(true);//will perform AND operation to evaluate Expression
链接地址: http://www.djcxy.com/p/73917.html