我知道for的规则&&,||但是&and是|什么?请举例说明。
&&
||
&and
|
这些是按位与和按位或运算符。
int a = 6; // 110 int b = 4; // 100 // Bitwise AND int c = a & b; // 110 // & 100 // ----- // 100 // Bitwise OR int d = a | b; // 110 // | 100 // ----- // 110 System.out.println(c); // 4 System.out.println(d); // 6
感谢卡洛斯指出在Java语言规范中相应的部分(15.22.1,15.22.2关于基于其输入操作者的不同的行为)。
的确,当两个输入均为布尔值时,这些运算符被视为布尔逻辑运算符,并且其行为类似于Conditional-And(&&)和Conditional-Or(||)运算符,但它们不会短路,因此以下操作是安全的:
Conditional-And(&&)
Conditional-Or(||)
if((a != null) && (a.something == 3)){ }
这不是:
if((a != null) & (a.something == 3)){ }
“短路”是指操作员不必检查所有条件。在上述示例中,&&仅在a不存在时检查第二个条件null(否则整个语句将返回false,无论如何都应检查以下条件),因此的语句a.something不会引发异常,或者被认为是“安全的” 。”
false
在&操作者始终检查子句中的每个状态,所以在上述例子中,a.something也可以当被评估a事实上是一个null值,产生一个异常。
&
a.something
null