java中的一个if语句中的多个逻辑表达式

时间:2014-09-28 09:44:42

标签: java boolean short-circuiting

嗨,我有这个例子:

  (1)
  if(false && false ||true){
            System.out.println("a");
  }

结果:

a

  (2)
  if(false && false | true){
            System.out.println("a");
  }

结果:

(empty)

在情况(1)中我们有短路OR,但在第二种情况下我们有长电路OR。行为的差异从哪里来?我知道表达式从左到右进行评估,并且AND的优先级高于OR,所以我无法弄清楚为什么在情况2中会发生这种情况?

2 个答案:

答案 0 :(得分:5)

&&的优先级高于||但不超过|。请参阅operator precedence list

答案 1 :(得分:3)

(1)

if (false && false || true) {
    System.out.println("a");
}

此处&&的优先级高于||

    首先评估
  1. false && false false
  2. false || true评估结果为true
  3. 结果输出" a"。

    (2)

    if (false && false | true) {
        System.out.println("a");
    }
    

    此处|的优先级高于&&

      首先评估
    1. false | true true
    2. false && true评估结果为false
    3. 所以没有输出。

      希望它有意义