在 Java 中 ,& 和 && 之间有什么区别?
2022-08-31 06:07:17
我一直认为Java中的运算符用于验证其布尔操作数是否都是,并且运算符用于对两个整数类型进行按位运算。&&
true
&
最近我了解到运算符也可以用于验证其两个布尔操作数是否都是,唯一的区别是,即使LHS操作数为假,它也检查RHS操作数。&
true
Java 中的运算符是否在内部过载?或者这背后还有其他概念吗?&
我一直认为Java中的运算符用于验证其布尔操作数是否都是,并且运算符用于对两个整数类型进行按位运算。&&
true
&
最近我了解到运算符也可以用于验证其两个布尔操作数是否都是,唯一的区别是,即使LHS操作数为假,它也检查RHS操作数。&
true
Java 中的运算符是否在内部过载?或者这背后还有其他概念吗?&
& < - 验证两个操作数
&& < - 如果第一个操作数的计算结果为 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
< - 这意味着评估然后评估,然后执行.exprA
exprB
|
exprA || exprB
< - 这意味着评估,只有当这是然后评估并执行.exprA
false
exprB
||
除了通过计算两个操作数不是一个懒惰的计算器之外,我认为按位运算符的主要特征比较了操作数的每个字节,如下面的示例所示:
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