Java Autoboxing and Unboxing
Java Autoboxing and Unboxing
Autoboxing is the automatic conversion that the Java compiler makes between the primitive types and their
corresponding object wrapper classes. For example, converting an int to an Integer, a double to
a Double, and so on. If the conversion goes the other way, this is called unboxing.
Character ch = 'a';
The rest of the examples in this section use generics. If you are not yet familiar with the syntax of generics, see
the Generics (Updated) lesson.
Although you add the int values as primitive types, rather than Integer objects, to li, the code compiles.
Because li is a list of Integer objects, not a list of int values, you may wonder why the Java compiler
does not issue a compile-time error. The compiler does not generate an error because it creates
an Integer object from i and adds the object to li. Thus, the compiler converts the previous code to the
following at runtime:
Converting a primitive value (an int, for example) into an object of the corresponding wrapper class
(Integer) is called autoboxing. The Java compiler applies autoboxing when a primitive value is:
Passed as a parameter to a method that expects an object of the corresponding wrapper class.
Assigned to a variable of the corresponding wrapper class.
Because the remainder (%) and unary plus (+=) operators do not apply to Integer objects, you may wonder
why the Java compiler compiles the method without issuing any errors. The compiler does not generate an
error because it invokes the intValue method to convert an Integer to an int at runtime:
Converting an object of a wrapper type (Integer) to its corresponding primitive (int) value is called
unboxing. The Java compiler applies unboxing when an object of a wrapper class is:
Passed as a parameter to a method that expects a value of the corresponding primitive type.
Assigned to a variable of the corresponding primitive type.
import java.util.ArrayList;
import java.util.List;
absolute value of -8 = 8
pi = 3.1416
Autoboxing and unboxing lets developers write cleaner code, making it easier to read. The following table lists
the primitive types and their corresponding wrapper classes, which are used by the Java compiler for
autoboxing and unboxing: