Integer -> double распаковывает, но Double -> int не распаковывает. Почему?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Integer -> double распаковывает, но Double -> int не распаковывает. Почему?

Сообщение Anonymous »

Чтобы избежать путаницы, я ищу правило/запись JLS.
  • Я не спрашиваю, почему Double -> int не работает, я спрашиваю о способе, который он дает сбой
  • Я знаю о преобразовании с потерями, как я уже упоминал в своем вопросе - я не спрашиваю о потере данных между double -> int
  • Я не прошу чьего-то «лучшего предположения» о том, почему разработчики спроектировали его таким образом
Я спрашиваю, почему Integer -> double выполняет преобразование (распаковку и расширение), а Double -> int не выполняет преобразование (даже распаковку)
Я ищу для записи JLS, в которой упоминается несогласованность преобразования Reference -> примитив, когда распаковка происходит в одной ситуации, но не в другой.

Это преобразование Integer -> double компилируется без ошибок

Код: Выделить всё

double d = Integer.valueOf(1);
Это означает, что происходит следующее:
  • распаковывается в int
  • значение int подвергается расширяющему примитивному преобразованию из int -> double
распакован. Распакованное значение затем расширяется. Это дает то же поведение, что и int -> double

Это создает предположение, что Double -> int также распакуется, давая то же поведение, что и double -> int
Для кода

Код: Выделить всё

int i = Double.valueOf(1);
Я ожидал бы сообщение об ошибке

преобразование с потерями из double в int

Предполагая, что Double распаковывается, мы должны наблюдать то же поведение, что и double -> int
Вместо этого мы получаем ошибку ввода

Невозможно преобразовать Double to int


Каково объяснение такого поведения?
Почему распаковка происходит между Integer -> double, но не происходит распаковка между Double -> int?
Почему они совпадают: Но это не так:
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»