- Я не спрашиваю, почему Double -> int не работает, я спрашиваю о способе, который он дает сбой
- Я знаю о преобразовании с потерями, как я уже упоминал в своем вопросе - я не спрашиваю о потере данных между double -> int
- Я не прошу чьего-то «лучшего предположения» о том, почему разработчики спроектировали его таким образом
Я ищу для записи JLS, в которой упоминается несогласованность преобразования Reference -> примитив, когда распаковка происходит в одной ситуации, но не в другой.
Это преобразование Integer -> double компилируется без ошибок
Код: Выделить всё
double d = Integer.valueOf(1);
- распаковывается в int
Код: Выделить всё
Integer - значение int подвергается расширяющему примитивному преобразованию из int -> double
Код: Выделить всё
IntegerЭто создает предположение, что Double -> int также распакуется, давая то же поведение, что и double -> int
Для кода
Код: Выделить всё
int i = Double.valueOf(1);
преобразование с потерями из double в int
Предполагая, что Double распаковывается, мы должны наблюдать то же поведение, что и double -> int
Вместо этого мы получаем ошибку ввода
Невозможно преобразовать Double to int
Каково объяснение такого поведения?
Почему распаковка происходит между Integer -> double, но не происходит распаковка между Double -> int?
Почему они совпадают:
Код: Выделить всё
Integer -> doubleКод: Выделить всё
int -> double
Код: Выделить всё
Double -> intКод: Выделить всё
double -> int
Мобильная версия