int a = 0; Integer b = a; //! int c = new Integer(b); //!!This is often referred to as automatic boxing or unboxing. If an int is passed where an Integer is expected, the compiler will automatically insert a call to the Integer constructor. Conversely, if an Integer is provided where an int is required, there will be an automatic call to the the IntValue method. Similar remarks hold for each of the other primitive types.
It follows for instance that, from the programmer's point of view, arithmetic operations are effectively defined on elements of the wrapper classes, for example:
Integer a = 1; Integer b = 1; Integer c = a * b;