我知道&&
和||
的规则,但是什么是&
和|
呢?请举个例子给我解释一下。
发布于 2010-10-25 20:34:19
这些是按位AND和按位OR运算符。
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 Language Spec (15.22.1,15.22.2)中关于操作符基于其输入的不同行为的适当部分。
实际上,当两个输入都是布尔值时,运算符被认为是布尔逻辑运算符,其行为类似于条件与(&&
)和条件或(||
)运算符,不同之处在于它们不会短路,而以下操作是安全的:
if((a != null) && (a.something == 3)){
}
这不是:
if((a != null) & (a.something == 3)){
}
“短路”是指操作员不一定要检查所有情况。在上面的示例中,只有当a
不是null
时,&&
才会检查第二个条件(否则整个语句将返回false,而且无论如何检查以下条件都是没有意义的),因此a.something
的语句不会引发异常,或者被认为是“安全的”。
&
运算符总是检查子句中的每个条件,因此在上面的示例中,当a.something
实际上是一个null
值时,可能会计算a
,从而引发异常。
发布于 2010-10-25 20:34:26
运算符&&和||是短路的,这意味着如果左侧表达式的值足以确定结果,它们将不会对右侧表达式求值。
发布于 2010-10-25 20:35:12
&和|提供与&&和||运算符相同的结果。不同之处在于,它们总是计算表达式where的两边&&和||停止计算第一个条件是否足以确定结果。
https://stackoverflow.com/questions/4014535
复制相似问题