Иногда я вижу использование API long
или Long
или int
или Integer
, и я не могу понять, как решение для этого принято?
Когда я должен выбрать что?
Иногда я вижу использование API long
или Long
или int
или Integer
, и я не могу понять, как решение для этого принято?
Когда я должен выбрать что?
Ответы:
Long
является Object
формой long
и Integer
является формой объекта int
.
long
Использует 64 бит . В int
использует 32 бит, и поэтому могут содержать только число до ± 2 млрд (-2 31 до +2 31 -1).
Вы должны использовать long
и int
, кроме случаев, когда вам нужно использовать методы, унаследованные от Object
, например hashcode
. Java.util.collections
методы обычно используют коробочные ( Object
-wrapped) версии, потому что они должны работать для любого Object
, а примитивный тип, например int
или long
, не является Object
.
Другое отличие состоит в том, что long
и int
являются передачей по значению , тогда как Long
и Integer
являются передачей по ссылке , как и все не примитивные типы Java. Так что если бы можно было изменить Long
илиInteger
(это не так, они неизменны без использования кода JNI), была бы другая причина использовать один поверх другого.
Последнее различие заключается в том, что Long
или Integer
может быть null
.
Есть пара вещей, которые вы не можете сделать с примитивным типом:
null
значениеObject
сЕсли вам не нужен ни один из них, вы должны предпочитать примитивные типы, так как они требуют меньше памяти.
int
, когда держите числа.int
слишком мал, используйтеlong
long
слишком мал, используйтеBigInteger
Collection
, обработку null
, ...), используйте Integer
/ Long
вместоAn int
является 32-битным целым числом; а long
является 64-битным целым числом. Какой из них использовать, зависит от того, с какими числами вы ожидаете работать.
int
и long
являются примитивными типами, а Integer
и Long
являются объектами. Примитивные типы более эффективны, но иногда вам нужно использовать объекты; Например, классы коллекции Java могут работать только с объектами, поэтому, если вам нужен список целых чисел, вы должны List<Integer>
, например, сделать его (вы не можете использовать int
его List
напрямую).
Int
32 bits (4byte)
-2,147,483,648 to 2,147,483,647
Long
64 bits (8byte)
-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
Если ваше использование переменной попадает в 32-битный диапазон, используйте Int
, иначе используйте long
. Обычно long используется для научных вычислений, и тому подобные вещи требуют большой точности. (например, значение пи).
Примером выбора одного над другим является случай YouTube. Сначала они определили счетчик просмотров видео как
int
переполненный при просмотре более 2 147 483 647 просмотров популярного видео. ПосколькуInt
счетчик не может хранить значения, превышающие его диапазон, YouTube изменил счетчик на 64-битную переменную и теперь может насчитывать до 9 223 372 036 854 775 807 просмотров. Поймите ваши данные и выберите тип, который подходит как 64-битная переменная займет вдвое больше памяти, чем 32-битная переменная.
Когда дело доходит до использования очень длинного числа, которое может превышать 32 бита для представления, вы можете использовать long, чтобы убедиться, что у вас не будет странного поведения.
В Java 5 вы можете использовать функции in-boxing и out-boxing, чтобы полностью использовать int и Integer. Это означает, что вы можете сделать:
int myInt = new Integer(11);
Integer myInt2 = myInt;
И из бокса позволяют переключаться между междунар и Integer без дополнительной конвертации ( то же самое для Long
, Double
, Short
тоже)
Вы можете использовать int
все время, но Integer
содержит некоторые вспомогательные методы, которые могут помочь вам выполнить некоторые сложные операции с целыми числами (такими как Integer.parseInt(String)
)
а) Класс объекта "Long" против примитивного типа "long". (По крайней мере на Java)
б) Существуют разные (даже неясные) размеры памяти примитивных типов:
Java - все ясно: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
C .. просто беспорядок: https://en.wikipedia.org/wiki/C_data_types