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.
Когда нет проблем с сужением, в чем проблема с расширением?