Java 布尔求值的阶

Java 布尔求值的阶,java,boolean,Java,Boolean,对于任意布尔表达式A和B: A&B等于B&A吗 同样地: A | B等于B | A吗 谢谢你的帮助。如果我们谈论的是Java,你指的是&和|,那么这些表达式是相同的。是的,它们是相同的。但是,如果将&更改为&,则它们将不再相同 例如: int a = 10, b = 0; boolean test = false && (a / b == 5); // 1 boolean test2 = (a / b == 5) && false; // 2 boole

对于任意布尔表达式A和B:

A&B等于B&A吗

同样地:

A | B等于B | A吗


谢谢你的帮助。

如果我们谈论的是Java,你指的是
&
|
,那么这些表达式是相同的。

是的,它们是相同的。但是,如果将
&
更改为
&
,则它们将不再相同

例如:

int a = 10, b = 0;

boolean test  = false && (a / b == 5);  // 1
boolean test2 = (a / b == 5) && false;  // 2

boolean test3 = false & (a / b == 5);   // 3
boolean test4 = (a / b == 5) & false;   // 4

3和4都将抛出一个
算术异常
,因此它们是相同的。然而,当1将执行并在结果中存储
false
时,2将抛出
算术异常

问题需要澄清

如果您谈论a&&b,当a和b是方法时,它将是以下内容:

首先评估a,然后评估b

a()&&b(): 将首先调用a,如果它返回false,则不会调用b()

b()&&a(): 如果b返回false,则不会调用a

实例:

if (obj != null && obj.isXXX())
不等于

if (obj.isXXX() && obj != null)
在第一种情况下,一切都会好起来。在第二步中,将抛出NullPointerException


此外,a&&b不等于b&&a,因为a或b可以改变状态。

实际试用怎么样?
&
都是按位的。为什么会这样?@user2979879添加了一个示例;