Read this on the oracle docs java.lang page:
Frequently it is necessary to represent a value of primitive type as if it were an object. The wrapper classes
Boolean,Character,Integer,Long,Float, andDoubleserve this purpose.
I’m not sure I understand why these are needed. It says they have useful functions such as equals(). But if I can do (a==b), why would I ever want to declare them as Integer, use more memory and use equals()? How does the memory usage differ for the 2?
Java’s generics system only supports class types. And since primitives are not classes, they can’t be used with generics. However, a primitive’s wrapper class can be used as a generic type. For example, you may not declare an
ArrayList<int>, but you can achieve a similar functionality with anArrayList<Integer>.It is also of occasional use to initialize a variable’s value to
null. Primitives, however, cannot be set tonull; that privilege is reserved for objects.