Почему я могу передать поплавок конструктору Double? - PullRequest
0 голосов
/ 27 июня 2018

В следующем коде я создаю некоторые Double переменные из double, float и String. Однако, согласно документации, Double имеет только конструкторы, которые принимают double и String - не float. Так как этот код компилируется?

Double d1 = new Double(2.5);
Double d2 = new Double(2.5f); //Why can I pass a float here?
Double d3 = new Double("2.5");

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Поскольку float обычно можно преобразовать в double без потери точности, float можно автоматически расширить до double. См. Расширение примитивного преобразования для получения информации о том, какие типы Java будут автоматически расширяться.

В связанном документе отмечено исключение, касающееся конверсии float / double:

Расширяющееся примитивное преобразование из float в double, которое не strictfp может потерять информацию об общей величине преобразованное значение.

0 голосов
/ 27 июня 2018

Существует два типа приведения: расширенное приведение (неявное) и сужающее приведение (явное выполнение)

Расширение -> преобразование нижнего диапазона в больший

Сужение -> преобразование большего диапазона в более низкий (что приводит к потере данных)

так что тип float может быть приведен к типу Double, найти представление для изображения enter image description here

...