Java 布尔求值的阶
对于任意布尔表达式A和B: A&B等于B&A吗 同样地: A | B等于B | A吗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
谢谢你的帮助。如果我们谈论的是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添加了一个示例;