You can find it on the blog.
1. First
Double is a reference type, so you can use it as a template argument
Example:
public class Tmp<T> { public Tmp() { } }
If you want to create a class like This.
Then you need to pass the type of the link, creating an in object. for instance
new Tmp<Integer>()
You will get an error if you create an object like:
new Tmp<int>()
2. Second
It is only because of the Wrapper classes that typical data type programming can be performed.
For example, the following method takes any number ( Byte, Integer, Double, Short, Float, Long, BigDecimal, BigInteger, AtomicInteger, AtomicLong ) and returns Integer adding these numbers.
public Integer add(Number a, Number b){ return a.intValue() + b.intValue(); }
3. Thirdly
In an earlier version, Java does not support AutoBoxing and AutoUnboxing. So, if you use this version of Java, you can easily distinguish both.
For example, if you are using Java 1.4 or earlier, then:
Integer a = 1; // Auto Boxing(Not Works) Integer a2 = new Integer(2); // Boxing (It Works)
4. Fourth
Storage of both is also different. Primitive types are stored in Stack , and reference types are stored in Heap
5. Fifth
You can use the functionality of this class, such as parsing Integer, Double, etc. strings, and use the same conditions.
Here are the functions and conventions of the Integer class

6. Sixth
You can serialize Integer while this is not possible with int
7. Seventh
You can pass Integer as an RMI method, but this is not possible with int
Note. Both Integer and int can be part of another object in the RMI argument; in fact, inside the Integer class, they store the value in int .
8. The eighth
The int variable is mutable (this does not apply to final int ), and the Integer is immutable. It will create a new object when we change the value.