Я бегу следующий фрагмент кодаПриоритет равенства и условных операторов в Java
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 оператор равенства имеет больший приоритет, чем тройной, поэтому оператор равенства должен быть оценен перед тройным.
В чем причина такого поведения кода?
Мне кажется, что код был оценен так, как будто это был 'T1()? F1(): (T2() == T3()? F2(): T4()) ' – Dragondraikk