Long ll = 102; // Error
Byte bb = 101; // No error
Почему Long
присваивание приводит к ошибке времени компиляции, в то время как Byte
назначение выполняется нормально?
Long ll = 102
приводит к ошибке компилятора "Тип несоответствия: невозможно преобразовать из int в Long". Я предположил, что компилятор расширит с 102 до Long
, а затем поле до Long
.
Но этого не происходит.
Но Byte bb = 101;
не генерирует ошибку компилятора. Здесь, как я полагаю, 101 сужается до Byte
(будучи недолгой интегральной константой), а затем вставляется в коробку до Byte
.
Когда нет проблем с сужением, в чем проблема с расширением?