Тип объекта или тип примитива

Кто-то может объяснить мне использование Целого числа, булевская переменная и т.д. вместо их типов примитивов в JAVA?

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

Спасибо!

5
задан John 21 May 2010 в 06:14
поделиться

4 ответа

Boolean , Integer , Long , ... являются объектами. Вы можете использовать их там, где вы не можете использовать примитивные типы, например

  • сохранение их в Коллекции как Map
  • с использованием их в качестве параметра шаблона
  • , присвоение им значения null
  • с использованием их более общим способом (например, Long как Число )

Примеры:

new ArrayList<Integer>();
Long id = null;
Number num = new Long( 3 );
8
ответ дан 18 December 2019 в 09:48
поделиться

Иногда вам действительно нужно, чтобы значение допускало обнуление, например, если ваше приложение хранит пользовательские данные, номер социального обеспечения может быть неизвестным. В этом случае лучше хранить null вместо -1.

Также есть вещи, которые нельзя делать с примитивными типами, например, хранить их на карте или использовать полиморфизм (Double и Integer оба являются экземплярами Number).

4
ответ дан 18 December 2019 в 09:48
поделиться

Смысл использования Integer, Boolean и т. Д. Состоит в том, чтобы разрешить использование примитивных типов в контекстах, требующих ссылочного типа. Классический вариант использования - это API-интерфейсы сбора, которые предоставляют наборы, списки, карты, очереди и т. Д., Где тип элемента должен быть некоторым ссылочным типом.

Таким образом, я могу написать:

List<Integer> list = new ArrayList<Integer>();

но следующее - ошибка компиляции:

List<int> list = new ArrayList<int>();

Обратите внимание, что этот вариант использования для примитивных типов-оболочек предшествует как универсальным типам, так и «новым» API-интерфейсам коллекций, и восходит к дни, когда единственными типами коллекций были оригинальные (предварительные) формы Vector и Hashtable и им подобных.

4
ответ дан 18 December 2019 в 09:48
поделиться

примитивы всегда быстрее.
однако бывают случаи, когда предметы действительно полезны:
1. апкастинг. Ваша функция может принимать Number (является родительским для всех числовых объектов: Integer, Float и т. Д.) В качестве аргумента.
2. Возможное нулевое значение. Например, он используется при хранении в базе данных. Объект может быть нулевым, примитивы должны иметь значение. Поэтому, если поле в db допускает значение NULL, лучше использовать объектную версию примитивного значения.
3. если функция берет объект, а вы всегда даете ему примитив, есть затраты на автобоксинг (превращение примитива в объект). То же самое для возврата из функции.
4. У объектов есть определенные методы, такие как getHashcode (), toString () и т. Д., Которые в некоторых случаях могут быть действительно полезны.

1
ответ дан 18 December 2019 в 09:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: