Кто-то может объяснить мне использование Целого числа, булевская переменная и т.д. вместо их типов примитивов в JAVA?
Я, может казаться, не осознаю, что преимущества их обеспечивают. Они, кажется, создают ненужные проблемы обработки нулевых значений.
Спасибо!
Boolean
, Integer
, Long
, ... являются объектами. Вы можете использовать их там, где вы не можете использовать примитивные типы, например
Map
null
Long
как Число
) Примеры:
new ArrayList<Integer>();
Long id = null;
Number num = new Long( 3 );
Иногда вам действительно нужно, чтобы значение допускало обнуление, например, если ваше приложение хранит пользовательские данные, номер социального обеспечения может быть неизвестным. В этом случае лучше хранить null вместо -1.
Также есть вещи, которые нельзя делать с примитивными типами, например, хранить их на карте или использовать полиморфизм (Double и Integer оба являются экземплярами Number).
Смысл использования Integer, Boolean и т. Д. Состоит в том, чтобы разрешить использование примитивных типов в контекстах, требующих ссылочного типа. Классический вариант использования - это API-интерфейсы сбора, которые предоставляют наборы, списки, карты, очереди и т. Д., Где тип элемента должен быть некоторым ссылочным типом.
Таким образом, я могу написать:
List<Integer> list = new ArrayList<Integer>();
но следующее - ошибка компиляции:
List<int> list = new ArrayList<int>();
Обратите внимание, что этот вариант использования для примитивных типов-оболочек предшествует как универсальным типам, так и «новым» API-интерфейсам коллекций, и восходит к дни, когда единственными типами коллекций были оригинальные (предварительные) формы Vector
и Hashtable
и им подобных.
примитивы всегда быстрее.
однако бывают случаи, когда предметы действительно полезны:
1. апкастинг. Ваша функция может принимать Number (является родительским для всех числовых объектов: Integer, Float и т. Д.) В качестве аргумента.
2. Возможное нулевое значение. Например, он используется при хранении в базе данных. Объект может быть нулевым, примитивы должны иметь значение. Поэтому, если поле в db допускает значение NULL, лучше использовать объектную версию примитивного значения.
3. если функция берет объект, а вы всегда даете ему примитив, есть затраты на автобоксинг (превращение примитива в объект). То же самое для возврата из функции.
4. У объектов есть определенные методы, такие как getHashcode (), toString () и т. Д., Которые в некоторых случаях могут быть действительно полезны.