Рассмотрите этот фрагмент кода:
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 - байтовый, короткий или символьный, и другой операнд - постоянное выражение типа int, значение которого может быть представлено в типе T, тогда тип условного выражения - T.
Таким образом, первый вывод рассматривает 'X'
char как int
, поэтому он печатает 88
.
Однако я не уверен, что понимаю, почему использование final
меняет поведение для второго вывода.