为啥下面的表达式返回 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?的主要内容,如果未能解决你的问题,请参考以下文章