Иногда я вижу 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. Поэтому, если бы можно было изменить a Long или Integer (это не так, они неизменяемы без использования кода JNI), есть и другая причина использовать один над другим.
Последнее различие заключается в том, что a Long или Integer может быть null.
Есть несколько вещей, которые вы не можете сделать с примитивным типом:
nullObject sЕсли вам не нужен какой-либо из них, вы должны предпочесть примитивные типы, поскольку они требуют меньше памяти.
int, удерживая цифры.int слишком мал, используйте longlong слишком мал, используйте BigIntegerCollection, обработке null,...) вместо Integer/long вместоAn int - это 32-разрядное целое число; a long - это 64-разрядное целое число. Какой из них использовать, зависит от того, насколько велики числа, с которыми вы рассчитываете работать.
 int и long являются примитивными типами, а Integer и long являются объектами. Примитивные типы более эффективны, но иногда вам нужно использовать объекты; например, классы коллекции Java могут работать только с объектами, поэтому, если вам нужен список целых чисел, вы должны сделать его List<Integer>, например (вы не можете использовать int в List напрямую).
Int32 bits (4byte)-2,147,483,648 to 2,147,483,647 
Long64 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 бита для представления, вы можете долго использовать, чтобы убедиться, что у вас не будет странного поведения.
Из Java 5 вы можете использовать функции in-boxing и out-boxing, чтобы использовать int и Integer полностью одинаково. Это означает, что вы можете:
int myInt = new Integer(11);
Integer myInt2 = myInt;
Входящий и исходящий бокс позволяют вам переключаться между int и 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