繁体   English   中英

Java OR运算符优先级

[英]Java OR operator precedence

如果b是假的,如何在Java中链接条件语句,而不是检查c

如果ac为假,且b为真,那么会检查c吗?

if (a || b || c)

我正在寻找PHP与OR||之间存在差异的类似功能

Java || 如果左操作数为true则operator(logical或operator)不会计算其他参数。 如果你想这样做,你可以使用| (按位或运算符),虽然根据名称,这有点像黑客。

http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.23

因此,&&计算与布尔操作数相同的结果。 它的不同之处仅在于有条件地而不是总是评估右侧操作数表达式。

http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.24

因此,|| 计算与|相同的结果 在布尔或布尔操作数上。 它的不同之处仅在于有条件地而不是总是评估右侧操作数表达式。

额外:依赖于这些语义来有条件地调用具有副作用的代码被认为是错误的编程风格。

c不会被检查。 为了证明这一点,您可以使用以下代码:

boolean a() {
  System.out.println("a")
  return false;
}

boolean b() {
  System.out.println("b")
  return true;
}

boolean c() {
  System.out.println("c")
  return true;
}

void test() {
  if(a() || b() || c()) {
    System.out.println("done")
  }
}

输出将是:

a
b
done

if(a || b || c)

对于你的情况,

a为真,则b和c未检查。

a为假,b为真,则不检查。

a和b为假,然后检查c。

首先评估运算符的左侧

如果a为假且b为真,则不会评估c

请参阅此答案 ,解决Java中逻辑运算符的短路问题。

1)如何在Java中链接条件语句,如果b为false,则不检查c

  • 你为什么需要那个? 它杀死OR逻辑 - 新的c然后是无关紧要的
  • 所以你的答案就是if (a || b)
  • 或者你正在寻找if (a || (b && c))

2)如果a和c为假,且b为真,那么会检查c吗? [if(a || b || c)]

  • || 进行短路评估。 所以,如果afalseb将被检查,如果b为真, c将不检查

有关短路评估的更多信息: 请参阅

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM