【发布时间】:2014-09-04 05:51:59
【问题描述】:
我只是好奇 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 called\n");
return bool;
}
}
输出:
---------- Case 1 ----------
getBoolean(true) was called
---------- Case 2 ----------
【问题讨论】:
-
逻辑与位与
-
它的工作方式与
&运算符一样。每个复合运算符都像没有=的等效运算符一样工作 - 所以+=就像+,-=就像-等等。为什么你会期望&=像&&? -
@Sneftel - 布尔值的“逻辑”和“按位”没有区别,因为它们只是一个活动位。这里重要的是
&&是短路的,但&和&=不是。 -
这就是我的意思,是的。
-
真的吗?因为这根本不是你说的。