gpt4 book ai didi

java - java中相等和条件运算符的优先级

转载 作者:行者123 更新时间:2023-12-02 12:14:58 25 4
gpt4 key购买 nike

我运行以下代码片段

System.out.println(T1() ? F1() : T2() == T3() ? F2() : T4());
public static boolean T1() { System.out.println("true1"); return true; }
public static boolean T2() { System.out.println("true2"); return true; }
public static boolean T3() { System.out.println("true3"); return true; }
public static boolean T4() { System.out.println("true4"); return true; }
public static boolean F1() { System.out.println("false1"); return false; }
public static boolean F2() { System.out.println("false2"); return false; }

我得到输出

true1
false1
false

第一个三元运算符评估相等运算符之前被评估,但根据 oracle documentation , 等式运算符的优先级高于三元运算符,因此等式运算符必须在三元运算符之前计算。

这种代码行为的原因是什么?

最佳答案

JLS 15.25

The conditional operator is syntactically right-associative (it groups right-to-left). Thus, a?b:c?d:e?f:g means the same as a?b:(c?d:(e?f:g)).

就你而言:

T1() ? F1() : (T2() == T3() ? F2() : T4())
a b c d e

T1() 被评估为 true,返回 true,因此接下来仅评估 F1()

关于java - java中相等和条件运算符的优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28210096/

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