For each primitive type, there is a corresponding class in the Java API: Byte, Short, Integer, Long, Character, Float, Double, Boolean.
Note that in Java, primitive types are not objects. But sometimes you need an object; for example, the collection classes like ArrayList can only store objects, not primitive types. If you want to store integers in an ArrayList, you need to put those integers in objects, because you can't store ints directly into the ArrayList. That's what you use the Integer wrapper class for: to create an object to contain the int.
Nope. A primitive variable contains real data, just a few bytes of the value. For example, an int is four bytes that directly translate to the number you put there. Every primitive gets its own memory space.
An object reference variable - referring to one of the wrapper classes or any other object - contains a "pointer" to an object. It's not exactly like a C pointer, but it does roughly the same thing. The wrapper objects probably have a private instance of their primitives, and may have other data, such as numeric precision. Any number of variables can reference the same object.
Does that help, or just raise more questions?
A good question is never answered. It is not a bolt to be tightened into place but a seed to be planted and to bear more seed toward the hope of greening the landscape of the idea. John Ciardi