"Ниже допустимый байт b = 27; но только потому, что компилятор автоматически сужает буквальное значение до байта. Другими словами, компилятор вводит приведение. Предыдущий код идентичен следующему: byte b = (byte). 27;"
На мой взгляд, это объяснение неверно. Эти две строки кода идентичны?
На самом деле
Код: Выделить всё
byte b = 27;
В спецификации сказано:
Сужение примитивное преобразование можно использовать, если тип переменной — byte, short или char, а значение константного выражения можно представить в виде тип переменной.
Во втором случае
Код: Выделить всё
byte b = (byte) 27;
Код: Выделить всё
byte b = 5.0; // compile error
byte b = 277777777; // compile error
byte b = (byte) 5.0; // valid!
byte b = (byte) 277777777; // valid!!
Может ли кто-нибудь объяснить реальное поведение компилятора в ситуации, описанной в книге выше?
Подробнее здесь: https://stackoverflow.com/questions/172 ... conversion
Мобильная версия