Есть ли разница между этими двумя утверждениями?
float ff = 1.2f;
Float fo = new Float(1.2f);
double fg = 3.2d;
Double fh = new Double(2.1d);
Могу ли я использовать '=' между (1) и (3) или между (2) и (4)??
8 ответов
Да.
- Делает простой старый тип данных (AKA примитивный тип) с именем "float".
- Делает Java-объект с именем Float, который содержит это значение, которое совпадает с (1)
Отвечая на вопросы редактирования:
Ты увидишь
- сообщение "возможная потеря точности" при попытке
ff = fg
, - "несовместимые типы", если вы пытаетесь
fo = fh
, fg = ff
будет работать нормально (поплавок умещается в два раза).fh = fo
все равно даст вам "несовместимые типы".
Да, первый - это примитивный тип, а второй - класс бокса, который включает в себя возможности примитивного типа с плавающей запятой, нам нужен второй, например, для использования в коллекциях. Если раньше вам приходилось много заниматься преобразованием типов (я думаю, что до Java 1.5), то теперь наличие классов-оберток использует эти возможности. Дополнительная информация. Вот
Да. Первый объявляет переменную примитивного типа float
и инициализирует его до 1,2.
В то время как второй объявляет переменную ссылочного типа Float
создает объект типа Float
а затем назначает ссылку на переменную.
new Float(1.2f) каждый раз создает новый объект Float, занимая память.
Если вы используете фабричный метод Float.valueOf(1.2f), JVM может повторно использовать существующие экземпляры объекта Float для того же значения. Он может создать новый экземпляр объекта, только если еще не существует экземпляра Float с таким же значением.
Обычно вы хотите использовать Float.valueOf(1.2f) вместо нового Float(1.2f).
Также обратите внимание, что примитивы и объекты работают по-разному с оператором равенства ==.
float x1 = 1.2f;
float x2 = 1.2f;
x1 == x2 // true
Float f1 = new Float(1.2f);
Float f2 = new Float(1.2f);
f1 == f2 // false
С этим объявлением у вас есть примитивный тип float и ему присвоено значение. Примитивный тип - это тип данных, который не состоит из других типов данных, и он не может быть разделен в дальнейшем (пояснить это просто). примитив, как правило, встроенный тип.
В этом случае вы создали объект, который внутренне состоит из меньших типов данных, а также содержит методы.
Основное различие между типом float и типом примитива заключается в том, что примитив является просто форматом данных и не имеет свойств или методов.
3 = 1 будет работать нормально, отдыхать не будет.
Да, примитивные типы не могут быть NULL, Объекты могут. Также к объекту Float прикреплено множество полезных служебных функций.
В реальных приложениях я предлагаю вам не использовать float или Float, это не очень точное и почти никогда не правильное решение, вместо этого используйте double или Double.