我运行以下代码片段
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; }
Run Code Online (Sandbox Code Playgroud)
我得到了输出
true1
false1
false
Run Code Online (Sandbox Code Playgroud)
在评估等式运算符之前,已对第一个三元运算符进行了求值,但根据oracle文档,等式运算符的优先级高于三元运算符,因此必须在三元运算符之前对等式运算符求值.
这样的代码行为的原因是什么?
条件运算符在语法上是右关联的(它从右到左分组).因此,a?b:c?d:e?f:g表示与a b相同:(c?d:(e?f:g)).
在你的情况下:
T1() ? F1() : (T2() == T3() ? F2() : T4())
a b c d e
Run Code Online (Sandbox Code Playgroud)
T1()
被评估为true,返回true,因此仅F1()
接下来评估.
归档时间: |
|
查看次数: |
255 次 |
最近记录: |