1

我很难理解 Java 中短路运算符的优先级。根据短路行为,表达式“true || true”的右侧部分在这里应该无关紧要,因为一旦“&&”条件的第一部分被评估为“false”,表达式的其余部分应该没有被评估。

但是,在执行以下代码时,我看到结果声明为“true”。有人可以向我解释一下吗?

    public class ExpressionTest{
        public static void main(String[] args) {
        boolean result1 = false && true || true;
        System.out.println(result1);
        }
    }
4

2 回答 2

4

查看有关操作员的本教程。该表清楚地表明&&具有比 更高的优先级||

所以,

false && true || true;

被评估为:

(false && true) || true;

休息我认为你可以自己评估。

于 2013-07-28T21:55:52.120 回答
4

来自JAVA 教程

同一行上的运算符具有相同的优先级。当相同优先级的运算符出现在同一个表达式中时,必须有一条规则来控制首先计算哪个。除了赋值运算符之外的所有二元运算符都是从左到右计算的;赋值运算符从右到左求值

因此,编译器将其解析为

boolean result1 = (false && true) || true;

因此,无论价值如何,都A || true返回。trueA

要获得理想的表达式,请执行以下操作:

boolean result1 = false && (true || true);
于 2013-07-28T21:56:04.240 回答