我一直认为&&Java 中的 operator 是用来验证它的 boolean 操作数是否都是true,而&operator 是用来对两个整数类型进行 Bit-wise 操作的。
&&
true
&
最近我知道&operator 也可以用来验证它的两个布尔操作数是否都是true,唯一的区别是即使 LHS 操作数为假,它也会检查 RHS 操作数。
&Java中的运算符是否在内部重载?或者这背后是否有其他概念?
& <-- 验证两个操作数 && <-- 如果第一个操作数的计算结果为假,则停止计算,因为结果将为假
(x != 0) & (1/x > 1)<-- 这意味着先评估(x != 0)然后评估(1/x > 1)然后执行 &。问题是对于 x=0 这将引发异常。
(x != 0) & (1/x > 1)
(x != 0)
(1/x > 1)
(x != 0) && (1/x > 1)<-- 这意味着评估(x != 0)并且只有当这是真的然后评估(1/x > 1)所以如果你有 x=0 那么这是完全安全的并且如果 (x != 0) 评估为 false 则不会抛出任何异常整个事情直接评估为 false不评估(1/x > 1).
(x != 0) && (1/x > 1)
编辑:
exprA | exprB<-- 这意味着先评估exprA然后评估exprB然后执行|.
exprA | exprB
exprA
exprB
|
exprA || exprB<-- 这意味着评估exprA,并且仅当这是false评估exprB并执行||.
exprA || exprB
false
||