为啥下面的表达式返回 true?

Posted

技术标签:

【中文标题】为啥下面的表达式返回 true?【英文标题】: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);
        
    

【问题讨论】:

【参考方案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教程现在让我明白了,从左到右的评估是这里的关键。

以上是关于为啥下面的表达式返回 true?的主要内容,如果未能解决你的问题,请参考以下文章

为啥var i=0;if(i)进不去?i=0又不是i="false"

我写的javascript正则表达式为啥匹配不了我的数字?

linux find 正则表达式

为啥这个表达不统一

3-3流程控制.循环语句

Linux 运算符