В приведенном ниже коде:Почему конечная переменная всегда является постоянным выражением?
final int a;
a=2;
byte b=a; // error: possible loss of precision
Почему я получаю эту ошибку? Не является ли a
окончательным значением переменной времени компиляции переменной и, следовательно, неявно сужается до байта во время назначения?
Другими словами, не приведенный выше код эквивалентен:
final int a=2;
byte b=a;
На самом деле компилятор не может быть таким умным. – usr
@usr Это какая-то серьезная примитивная религия. Серьезно: Почему? Компиляторы чувствительны к номерам '1',' 2', '4' и т. Д. При умножении. Случай в этом ответе явно неразрешим, потому что значения, возвращаемые из 'random', зависят от времени запуска программы. – LyingOnTheSky
@LyingOnTheSky Но даже если вычисление было детерминированным, и компилятор мог понять это, ему все равно не разрешалось рассматривать его как постоянное выражение (устраняя необходимость в литье). Важно, что то, что является или не является допустимой программой java, не зависит от того, насколько интеллектуальным является конкретный компилятор. – CodesInChaos