首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >布尔运算符的区别:& vs &&和| vs ||

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

Stack Overflow用户
提问于 2010-10-25 20:31:59
回答 7查看 208.3K关注 0票数 120

我知道&&||的规则,但是什么是&|呢?请举个例子给我解释一下。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-10-25 20:34:19

这些是按位AND和按位OR运算符。

代码语言:javascript
复制
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.115.22.2)中关于操作符基于其输入的不同行为的适当部分。

实际上,当两个输入都是布尔值时,运算符被认为是布尔逻辑运算符,其行为类似于条件与(&&)和条件或(||)运算符,不同之处在于它们不会短路,而以下操作是安全的:

代码语言:javascript
复制
if((a != null) && (a.something == 3)){
}

这不是:

代码语言:javascript
复制
if((a != null) & (a.something == 3)){
}

“短路”是指操作员不一定要检查所有情况。在上面的示例中,只有当a不是null时,&&才会检查第二个条件(否则整个语句将返回false,而且无论如何检查以下条件都是没有意义的),因此a.something的语句不会引发异常,或者被认为是“安全的”。

&运算符总是检查子句中的每个条件,因此在上面的示例中,当a.something实际上是一个null值时,可能会计算a,从而引发异常。

票数 149
EN

Stack Overflow用户

发布于 2010-10-25 20:34:26

运算符&&和||是短路的,这意味着如果左侧表达式的值足以确定结果,它们将不会对右侧表达式求值。

票数 7
EN

Stack Overflow用户

发布于 2010-10-25 20:35:12

&和|提供与&&和||运算符相同的结果。不同之处在于,它们总是计算表达式where的两边&&和||停止计算第一个条件是否足以确定结果。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4014535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档