Иногда я вижу использование 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слишком мал, используйтеlonglongслишком мал, используйтеBigIntegerCollection, обработку null, ...), используйте Integer/ LongвместоAn intявляется 32-битным целым числом; а longявляется 64-битным целым числом. Какой из них использовать, зависит от того, с какими числами вы ожидаете работать.
intи longявляются примитивными типами, а Integerи Longявляются объектами. Примитивные типы более эффективны, но иногда вам нужно использовать объекты; Например, классы коллекции Java могут работать только с объектами, поэтому, если вам нужен список целых чисел, вы должны List<Integer>, например, сделать его (вы не можете использовать intего Listнапрямую).
Int32 bits (4byte)-2,147,483,648 to 2,147,483,647Long64 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