Как поплавок превратился здесь в дабл? - PullRequest
4 голосов
/ 10 сентября 2010

Редактировать: Как всегда, отличный ответ менее чем за 5 минут :) Оказывается, если я внесу небольшое изменение - сделайте прописную букву F в "float", я получу результат, который ожидал.1003 * Вывод equal double, что для меня не имеет смысла.Я ожидал equal Float.Если я закомментирую второй printIt, то это действительно вывод.Я просто не знаю, почему, когда столкнулся с выбором между двумя printIt, компилятор проигнорировал тот, чей параметр совпал идеально.

1 Ответ

7 голосов
/ 10 сентября 2010

Вы получаете результат, который получаете, потому что бокс / распаковка были добавлены позднее в жизни Java, и требовалось, чтобы существующий код не был изменен путем добавления этой функции.Поэтому, когда вы передаете примитивный float для printIt, он приводится к примитиву double, потому что альтернатива будет означать, что старый код (до JDK1.4) будет работать по-другому, что было неприемлемо для Sun.

По сути, подумайте, если бы это был код, предшествующий JDK1.4, где бокс не был альтернативой, ни при каких условиях примитивный двойной тип не мог быть приведен к java.lang.Float.Нельзя допустить, чтобы добавление бокса сломало это.

Читая вопрос, который возникает у меня из того, как вы это произносите, вы можете не увидеть разницу между Float и float, потому что вы ссылаетесь на переход от прописной буквы F кстрочная буква F как крошечное изменение, когда оно на самом деле не так крошечно.Версия в нижнем регистре относится к примитивному числовому типу, версия в верхнем регистре относится к объекту, который оборачивает примитивный числовой тип, чтобы позволить использовать числовые элементы в вещах общего назначения, таких как коллекции.До JDK1.4, если вы хотели сделать что-то подобное, вы должны были вручную написать строку типа

myList.add(new Float(1.0F));

, если вы хотите добавить значение с плавающей точкой в ​​список.Добавление бокса / распаковки в JDK1.4 попыталось описать это и заставить компилятор сделать это за нас, но, к сожалению, вам все еще нужно понять разницу между ними, чтобы понять, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...