在 Java 中 ,& 和 && 之间有什么区别?

2022-08-31 06:07:17

我一直认为Java中的运算符用于验证其布尔操作数是否都是,并且运算符用于对两个整数类型进行按位运算。&&true&

最近我了解到运算符也可以用于验证其两个布尔操作数是否都是,唯一的区别是,即使LHS操作数为假,它也检查RHS操作数。&true

Java 中的运算符是否在内部过载?或者这背后还有其他概念吗?&


答案 1

& < - 验证两个操作数
&& < - 如果第一个操作数的计算结果为 false,则停止评估,因为结果将为 false

(x != 0) & (1/x > 1)< - 这意味着评估然后评估然后执行&。问题是对于 x=0,这将引发异常。(x != 0)(1/x > 1)

(x != 0) && (1/x > 1)< - 这意味着评估,只有当这是真的,然后评估,所以如果你有x = 0,那么这是完全安全的,并且不会抛出任何异常,如果(x != 0)评估为假,整个事情直接评估为false而不评估。(x != 0)(1/x > 1)(1/x > 1)

编辑:

exprA | exprB< - 这意味着评估然后评估,然后执行.exprAexprB|

exprA || exprB< - 这意味着评估,只有当这是然后评估并执行.exprAfalseexprB||


答案 2

除了通过计算两个操作数不是一个懒惰的计算器之外,我认为按位运算符的主要特征比较了操作数的每个字节,如下面的示例所示:

int a = 4;
int b = 7;
System.out.println(a & b); // prints 4
//meaning in an 32 bit system
// 00000000 00000000 00000000 00000100
// 00000000 00000000 00000000 00000111
// ===================================
// 00000000 00000000 00000000 00000100