java条件运算符,为什么下面的代码输出为true?

时间:2016-01-09 06:19:02

标签: java conditional-operator

class test {
    public static void main (String[] args) {
        boolean a = false;
        boolean b = true;

        if (a && a || b) {
            System.out.println(true);
        }
    }
} //--why it always true????o/p is true but why??

5 个答案:

答案 0 :(得分:7)

操作顺序。

&&的优先级高于||,因此首先评估 。您的if条件可以按如下方式重写:

(a && a) || b
(false && false) || true
false || true
true

对于您列出的条件,此条件始终为false || true,始终为true

检查here以获取Oracle的官方表格,其中列出了所有运营商的优先顺序。

答案 1 :(得分:1)

您的代码与此语句等效:

如果A为真或B为真,则该陈述为真

由于B设置为true,因此您的陈述为真。此外,没有必要测试A两次,而不是做

(a && a || b) // old 
(a || b) //new

&&具有更高的操作顺序,然后是||,因此首先进行评估。 要解决此问题,您可以使用大括号

if( a && ( a || b )) //tests as i believe you wanted although its redundent

答案 2 :(得分:0)

a && a || b :
    a && a => false && false => false
    false || b => false || true => true

如果有改变运算符优先级的parens:

a && (a||b) :
    a || b => false || true => true
    a && true => false && true => false

然后结果会有所不同。

道德:如果你不确定优先使用parens所以你确定。

答案 3 :(得分:0)

A =假 B =真

A&& A(假和&假)=假 (A& A(假))|| B(真)=真

您的上一个表达是*ho96.com/*

答案 4 :(得分:0)

这是因为AND(&&)运算符先是OR(||)运算符求解。 运行

  if (b||a&&a) {

        System.out.println(true);
    }

它会再次给你真实,因为&&首先计算。