Рассмотрим следующее:
class TypeCast {
public static void main(String[] args) {
byte by = 4; // Compiler casts int literal to byte
int in = 4;
byte byt = in; // Compilation Error: compiler can not cast automatically. WHY?
}
}
Я знаю, что компилятор может сузить в случае литерального назначения. Но он не может сделать то же самое, когда присваивание включает переменную вместо литерала. Почему?
EDIT: Я думаю, что большинство людей не могли понять, что я пытался спросить. Речь идет не о назначении "вне диапазона" значения о назначении "in-range" значения на byte
, и пусть компилятор позаботится о сужении. Совершенно очевидно, что "байт" не сможет обработать значение диапазона, и потребует явного преобразования (и это не я хочу знать).
Указанное значение попадает в диапазон byte
, в чем разница между int
литеральным назначением на byte
и int
присвоение переменной типа byte
?