首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java逻辑运算符短路

Java逻辑运算符短路
EN

Stack Overflow用户
提问于 2012-01-06 23:06:22
回答 10查看 154K关注 0票数 117

哪个集合是短路的,复杂的条件表达式是短路的到底是什么意思?

代码语言:javascript
复制
public static void main(String[] args) {
  int x, y, z;

  x = 10;
  y = 20;
  z = 30;

  // T T
  // T F
  // F T
  // F F

  //SET A
  boolean a = (x < z) && (x == x);
  boolean b = (x < z) && (x == z);
  boolean c = (x == z) && (x < z);
  boolean d = (x == z) && (x > z);
  //SET B    
  boolean aa = (x < z) & (x == x);
  boolean bb = (x < z) & (x == z);
  boolean cc = (x == z) & (x < z);
  boolean dd = (x == z) & (x > z);

}
EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2012-01-06 23:10:22

The The The

操作员“短路”,这意味着如果没有必要,他们不会计算右侧。

The The The

运算符用作逻辑运算符时,总是对两边都求值。

每个操作员只有一种短路情况,它们是:

-没有必要知道右侧是什么,因为结果只能是

不管它的值是什么

-没有必要知道右侧是什么,因为结果只能是

不管它的值是什么

让我们用一个简单的例子来比较它们的行为:

代码语言:javascript
复制
public boolean longerThan(String input, int length) {
    return input != null && input.length() > length;
}

public boolean longerThan(String input, int length) {
    return input != null & input.length() > length;
}

第二个版本使用非短路操作器

并将抛出一个

如果

,但第一个版本将返回

没有例外。

票数 269
EN

Stack Overflow用户

发布于 2012-01-06 23:09:35

集合A使用短路布尔运算符。

“短路”在布尔运算符的上下文中的意思是,对于一组布尔值b1,b2,...,bn,一旦这些布尔值中的第一个为真(||)或假(&&),则短路版本将立即停止求值。

例如:

代码语言:javascript
复制
// 2 == 2 will never get evaluated because it is already clear from evaluating
// 1 != 1 that the result will be false.
(1 != 1) && (2 == 2)

// 2 != 2 will never get evaluated because it is already clear from evaluating
// 1 == 1 that the result will be true.
(1 == 1) || (2 != 2)
票数 10
EN

Stack Overflow用户

发布于 2012-01-06 23:10:28

简单地说,

短路

意味着一旦你知道答案不能再改变,就停止评估。例如,如果您正在评估一个逻辑链

S,您会发现一个

在链的中间,您知道结果将是false,而不管链中其余表达式的值是什么。同样的道理也适用于一系列

s:一旦你发现一个

,您可以立即知道答案,因此可以跳过计算其余表达式。

您可以使用以下命令向Java表明您想要短路

而不是

而不是

..。你的帖子中的第一组是短路。

注意,这不仅仅是为了节省几个CPU周期:

代码语言:javascript
复制
if (mystring != null && mystring.indexOf('+') > 0) {
    ...
}

短路意味着正确操作和崩溃之间的差异(在mystring为空的情况下)。

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

https://stackoverflow.com/questions/8759868

复制
相关文章

相似问题

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