Есть ли разница между этими двумя утверждениями? - PullRequest
3 голосов
/ 17 июня 2009
  1. float ff = 1.2f;
  2. Float fo = new Float(1.2f);
  3. double fg = 3.2d;
  4. Double fh = new Double(2.1d);

Могу ли я использовать '=' между (1) и (3) или между (2) и (4) ??

Ответы [ 8 ]

21 голосов
/ 17 июня 2009

Да.

  1. Делает простой старый тип данных (AKA примитивный тип) с именем «float».
  2. Делает объект Java с именем Float, который содержит это значение, которое оказывается идентичным (1)

Ответы на вопросы редактирования:

Вы увидите

  1. Сообщение «возможная потеря точности» при попытке ff = fg.
  2. «несовместимые типы», если вы попытаетесь fo = fh.
  3. fg = ff будет работать нормально (поплавок умещается в два раза).
  4. fh = fo все равно выдаст вам «несовместимые типы».
7 голосов
/ 17 июня 2009

Да, первый - это примитивный тип, а второй - класс бокса, который включает в себя возможности примитивного типа с плавающей точкой, нам нужен второй, например, для использования в коллекциях. Если раньше вам приходилось много заниматься преобразованием типов (я думаю, что до Java 1.5), то теперь наличие классов-оболочек использует эти возможности. Дополнительная информация. здесь

7 голосов
/ 17 июня 2009

Да, 2 создает объект.

3 голосов
/ 17 июня 2009

Да. Первый объявляет переменную примитивного типа float и инициализирует ее как 1.2.

В то время как второй объявляет переменную ссылочного типа Float, создает объект типа Float и затем назначает ссылку на переменную.

2 голосов
/ 17 июня 2009

new Float (1.2f) создает new 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
1 голос
/ 11 декабря 2012
  1. С этим объявлением у вас есть тип примитива с плавающей точкой и ему присвоено значение. Примитивный тип - это тип данных, который не состоит из других типов данных и не может быть разделен в дальнейшем (пояснить это просто). примитив, как правило, встроенный тип.

  2. В этом случае вы создали объект, который внутренне состоит из меньших типов данных, а также содержит методы.

Основное отличие между типом float примитива и типом объекта заключается в том, что примитив является просто форматом данных и не имеет свойств или методов.

3 = 1 будет работать нормально, отдых не будет.

1 голос
/ 17 июня 2009

Да, примитивные типы не могут быть NULL, Объекты могут. Также к объекту Float прикреплено множество полезных служебных функций.

0 голосов
/ 18 июня 2009

В реальных приложениях я предлагаю вам не использовать float или Float, это не очень точное и почти никогда не правильное решение, вместо этого используйте double или Double.

...