【问题标题】:Why does the following expression return true?为什么下面的表达式返回 true?
【发布时间】:2013-07-28 14:36:17
【问题描述】:

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

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

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

【问题讨论】:

    标签: java operators short-circuiting


    【解决方案1】:

    在操作员上检查此tutorial。该表清楚地显示&& 的优先级高于||

    所以,

    false && true || true;
    

    被评估为:

    (false && true) || true;
    

    我认为你可以自己评估。

    【讨论】:

    • 感谢您的回复!我现在明白为什么表达式评估为“真”。但是,为什么让编译器选择评估策略为 (false && true) ||真的。相反,它可能只是在“&&”运算符之前看到“false”后忽略了语句的其余部分?
    • @sunsin1985。 Java 从左到右计算表达式。就是这样。
    • 谢谢!这向我解释了。
    【解决方案2】:

    来自The JAVA turorial

    同一行的运算符具有相同的优先级。当运营商 同等优先级出现在同一个表达式中,规则必须支配 首先评估。所有二元运算符,除了 赋值运算符从左到右求值;任务 运算符从右到左求值

    因此,编译器将其解析为

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

    因此,A || true 返回 true 而不管 A 的值。

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

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

    【讨论】:

    • 感谢您的回复! Java教程现在让我明白了,从左到右的评估是这里的关键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 2015-07-27
    • 2012-02-06
    • 2013-10-15
    • 1970-01-01
    • 2019-07-01
    相关资源
    最近更新 更多