Sometimes I see API's using long or Long or int or Integer, and I can't figure how the decision is made for that?
When should I choose what?
Sometimes I see API's using long or Long or int or Integer, and I can't figure how the decision is made for that?
When should I choose what?
Long is the Object form of long, and Integer is the object form of int.
The long uses 64 bits. The int uses 32 bits, and so can only hold numbers up to ±2 billion (-231 to +231-1).
You should use long and int, except where you need to make use of methods inherited from Object, such as hashcode. Java.util.collections methods usually use the boxed (Object-wrapped) versions, because they need to work for any Object, and a primitive type, like int or long, is not an Object.
Another difference is that long and int are pass-by-value, whereas Long and Integer are pass-by-reference value, like all non-primitive Java types. So if it were possible to modify a Long or Integer (it's not, they're immutable without using JNI code), there would be another reason to use one over the other.
A final difference is that a Long or Integer could be null.
int, when holding numbers.int is too small, use a longlong is too small, use BigIntegerCollection, handling null, ...) use Integer/Long insteadThere are a couple of things you can't do with a primitive type:
null valueObjectsUnless you need any of those, you should prefer primitive types, since they require less memory.
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,807An example of choosing one over the other is YouTube's case. They first defined video view counter as an
intwhich was overflowed when more than 2,147,483,647 views where received to a popular video. Since anIntcounter cannot store any value more than than its range, YouTube changed the counter to a 64 bit variable and now can count up to 9,223,372,036,854,775,807 views. Understand your data and choose the type which fits, as 64 bit variable will take double the memory than a 32 bit variable.
An int is a 32-bit integer; a long is a 64-bit integer. Which one to use depends on how large the numbers are that you expect to work with.
int and long are primitive types, while Integer and Long are objects. Primitive types are more efficient, but sometimes you need to use objects; for example, Java's collection classes can only work with objects, so if you need a list of integers you have to make it a List<Integer>, for example (you can't use int in a List directly).
When it comes to using a very long number that may exceed 32 bits to represent, you may use long to make sure that you'll not have strange behavior.
From Java 5 you can use in-boxing and out-boxing features to make the use of int and Integer completely the same. It means that you can do :
int myInt = new Integer(11);
Integer myInt2 = myInt;
The in and out boxing allow you to switch between int and Integer without any additional conversion (same for Long,Double,Short too)
You may use int all the time, but Integer contains some helper methods that can help you to do some complex operations with integers (such as Integer.parseInt(String) )
a) object Class "Long" versus primitive type "long". (At least in Java)
b) There are different (even unclear) memory-sizes of the primitive types:
Java - all clear: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
C .. just mess: https://en.wikipedia.org/wiki/C_data_types