Java OR运算符优先级

时间:2014-01-18 09:40:44

标签: java operator-precedence

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

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

if (a || b || c)

我正在寻找PHP与OR||

之间存在差异的类似功能

5 个答案:

答案 0 :(得分:14)

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

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

  

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

if(a || b || c)

对你来说,

a为真,然后b和c未检查。

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

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

首先评估运算符的左侧

答案 3 :(得分:0)

如果a为false且b为true,则不会评估c

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

答案 4 :(得分:0)

  

1)如何在 b 为假的情况下在Java中链接条件语句,而不是检查 c

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

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

  • 都能跟得上
  • ||进行短路评估。因此,如果afalse,则会检查b,如果b为真,则不会检查c

有关短路评估的更多信息:refer