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