Рассмотрим этот фрагмент кода:
public static void main(String[] args) {
int z1 = 0;
final int z2 = 0;
System.out.println(false ? z1 : 'X');
System.out.println(false ? z2 : 'X');
}
При запуске этого кода я ожидаю увидеть две X
в консоли. Однако реальный вывод:
88
X
Если мы посмотрим на спецификации Java относительно тройного оператора, мы обнаружили, что
Если один из операндов имеет тип T, где T является байтом, коротким или char, а другой операнд является константным выражением типа int, значение которого представляется в типе T, то тип условного выражения T.
Итак, первый вывод рассматривает 'X'
char как int
, поэтому он печатает 88
.
Однако я не знаю, почему использование final
изменяет поведение для второго выхода.