gpt4 book ai didi

java - 与运算符优先级相关的混淆

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:11:29 24 4
gpt4 key购买 nike

public class A{
public static void main(){
boolean result = true || 3 < 5/0 && false;
System.out.println(result);
}
}

我编译了这个程序。它按预期完美编译。但是当我运行这个程序时,它给出了一个输出-

true

好吧,这件事让我很困扰,因为除法 (/) 运算符显然具有最高优先级。然后是小于 (<) 运算符,然后是 AND(&&) 运算符,然后是 OR(||) 运算符。所以根据我的说法,应该遵循的第一步如下 -

true || 3 < (5/0) && false

此时它本身应该引发异常。但这不会发生。好吧,我认为计算机对这个表达式的评估如下 -

(true) || 3 < 5/0 && false

然后它认为不需要评估 || 的右侧因为短路评估。但是 ||其中优先级最低!!谁能解释一下这个表达式是如何一步步执行的,以及 && 的优先级是如何高于 || 的。我会很感激。感谢您阅读到这里:)

最佳答案

来自 https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.24

The conditional-or operator || operator is like | (§15.22.2), but evaluates its right-hand operand only if the value of its left-hand operand is false.

在你的例子中,左边的操作数是 true,所以显然右边的操作数根本没有被评估。

关于java - 与运算符优先级相关的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44238619/

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