Java 为什么下面的表达式返回true?
我很难理解Java中短路运算符的优先级。根据短路行为,表达式“true | | true”的右侧部分在此不重要,因为一旦“&&”条件的第一部分被计算为“false”,表达式的其余部分就不应该被计算 但是,当执行下面的代码时,我看到结果声明为“true”。有人能给我解释一下吗Java 为什么下面的表达式返回true?,java,operators,short-circuiting,Java,Operators,Short Circuiting,我很难理解Java中短路运算符的优先级。根据短路行为,表达式“true | | true”的右侧部分在此不重要,因为一旦“&&”条件的第一部分被计算为“false”,表达式的其余部分就不应该被计算 但是,当执行下面的代码时,我看到结果声明为“true”。有人能给我解释一下吗 public class ExpressionTest{ public static void main(String[] args) { boolean result1 = fals
public class ExpressionTest{
public static void main(String[] args) {
boolean result1 = false && true || true;
System.out.println(result1);
}
}
在操作员身上检查这个。该表清楚地显示,&&
的优先级高于|
所以
评估结果如下:
(false && true) || true;
Rest我认为您可以自己进行评估。请在操作员上检查这一点。该表清楚地显示,&&
的优先级高于|
所以
评估结果如下:
(false && true) || true;
休息我想你可以自己评估。来自
同一行上的运算符具有相同的优先级。当
相同的优先级出现在同一表达式中,必须以规则为准
首先对其进行评估。除
赋值运算符从左到右求值;分配
操作符从右向左求值
因此,编译器将其解析为
boolean result1 = (false && true) || true;
因此,A | | true
返回true
,而不考虑A
值
要获得理想的表达式,请执行以下操作:
boolean result1 = false && (true || true);
从
同一行上的运算符具有相同的优先级。当
相同的优先级出现在同一表达式中,必须以规则为准
首先对其进行评估。除
赋值运算符从左到右求值;分配
操作符从右向左求值
因此,编译器将其解析为
boolean result1 = (false && true) || true;
因此,A | | true
返回true
,而不考虑A
值
要获得理想的表达式,请执行以下操作:
boolean result1 = false && (true || true);
谢谢你的回复!我现在明白了为什么表达式的计算结果为“true”。但是,为什么编译器会选择(false&&true)| true的求值策略呢。相反,它可以在1985年看到“&&”操作符之前的一个“false”之后忽略语句的其余部分。Java从左到右计算表达式。就是这样,谢谢!这就向我解释了。谢谢你的回复!我现在明白了为什么表达式的计算结果为“true”。但是,为什么编译器会选择(false&&true)| true的求值策略呢。相反,它可以在1985年看到“&&”操作符之前的一个“false”之后忽略语句的其余部分。Java从左到右计算表达式。就是这样,谢谢!这就向我解释了。谢谢你的回复!Java教程现在让我明白了,从左到右的评估是这里的关键。谢谢你的回复!Java教程现在让我明白了,从左到右的求值是这里的关键。