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

java conditional operator,why following code is giving output as true?

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??

您的代码等同于此语句::

如果 A 为真或 B 为真则命题为真

因为 B 设置为真,所以你的说法是正确的。此外,没有必要测试 A 两次,而不是做

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

&& 的运算顺序比 || 高,所以先求值。 要解决此问题,您可以使用大括号

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

运算顺序。

&&|| 具有更高的优先级,因此被评估为 first。您的 if 条件可以改写如下:

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

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

查看 here Oracle 的官方 table,其中列出了所有运算符的优先级。

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

如果有括号改变运算符优先级:

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

那么结果就不一样了

寓意:如果您不确定优先顺序,请使用括号,这样您就确定了。

A = 假
B = 真

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

你的最后一个表达是False || True = True

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

  if (b||a&&a) {

        System.out.println(true);
    }

它会再次给你 true 因为 && 是先计算的。