一尘不染

Java布尔运算符的区别:&vs &&和| vs ||

java

我知道for的规则&&||但是&and|什么?请举例说明。


阅读 624

收藏
2020-03-05

共1个答案

一尘不染

这些是按位与和按位或运算符。

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(||)运算符,但它们不会短路,因此以下操作是安全的:

if((a != null) && (a.something == 3)){
}

这不是:

if((a != null) & (a.something == 3)){
}

“短路”是指操作员不必检查所有条件。在上述示例中,&&仅在a不存在时检查第二个条件null(否则整个语句将返回false,无论如何都应检查以下条件),因此的语句a.something不会引发异常,或者被认为是“安全的” 。”

&操作者始终检查子句中的每个状态,所以在上述例子中,a.something也可以当被评估a事实上是一个null值,产生一个异常。

2020-03-05