gpt4 book ai didi

java - Java 中的逻辑运算符优先级

转载 作者:搜寻专家 更新时间:2023-11-01 01:26:33 28 4
gpt4 key购买 nike

我对此不满意:http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.22 .它清楚地说明了以下内容:

"Each operator is commutative if the operand expressions have no side effects."

"These operators have different precedence, with & having the highest precedence and | the lowest precedence".

为什么 JVM 不遵守它自己的规则。以下面的例子为例。

public static void main(String[] args){
boolean bool = isTrue1() | isFalse1() & isFalse2() ;
System.out.println("Result : " + bool);
}

public static boolean isFalse1() {
System.out.println("1 : " + false);
return false ;
}
public static boolean isFalse2() {
System.out.println("2 : " + false);
return false ;
}
public static boolean isTrue1() {
System.out.println("3 : " + true);
return true ;
}

结果是:

3 : true
1 : false
2 : false
Result : true

虽然实际结果应该是,根据 & 运算符在 | 之前计算的事实运营商:

1 : false
2 : false
3 : true
Result : true

最好能解释一下为什么没有正确实现。即使在第二部分周围添加括号,也不会使用正确的优先级。

最佳答案

"These operators have different precedence, with & having the highest precedence and | the lowest precedence".

仅仅因为它们具有更高的优先级,并不意味着它们的操作数将首先被评估。

这个

boolean bool = isTrue1() | isFalse1() & isFalse2() ;

等同于

boolean bool = isTrue1() | ( isFalse1() & isFalse2() ) ;

这就是所有的优先级。

正如 Java 语言规范所说,operator operands are evaluated left to right.

The Java programming language guarantees that the operands of operators appear to be evaluated in a specific evaluation order, namely, from left to right.

关于java - Java 中的逻辑运算符优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21557124/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com