Long vs Integer, long vs int, what to use and when?
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
.
There are a couple of things you can't do with a primitive type:
- Have a
null
value - synchronize on them
- Use them as type parameter for a generic class, and related to that:
- Pass them to an API that works with
Object
s
Unless you need any of those, you should prefer primitive types, since they require less memory.
- By default use an
int
, when holding numbers. - If the range of
int
is too small, use along
- If the range of
long
is too small, useBigInteger
- If you need to handle your numbers as object (for example when putting them into a
Collection
, handlingnull
, ...) useInteger
/Long
instead