Autoboxing and Unboxing convert primitive types to corresponding Wrapper classes and vice versa.
In Java, all primitive data types have a corresponding Wrapper class. Wrapper classes provide a way to use primitive data types as objects.
Converting a primitive type to a Wrapper class is called autoboxing, and converting a wrapper class to a primitive type is known as unboxing.
A table of primitive types and their corresponding Wrapper classes:
Primitive type | Wrapper class |
boolean | Boolean |
byte | Byte |
char | Character |
float | Float |
int | Integer |
long | Long |
short | Short |
double | Double |
Java Autoboxing – Primitive Type to Wrapper Class
In the case of autoboxing, the Java compiler will automatically convert the primitive type to the appropriate Wrapper class.
Example 1:
class Test { int id = 5; Integer id1 = id; // autoboxing }
Autoboxing is very useful when working with lists since lists do not work with primitive types.
Example 2:
class Test { public static void main(String[] args) { int a = 10; int b = 20; List<Integer> list = new ArrayList(); list.add(a); //autoboxing list.add(b); // autoboxing list.add(30); } }
Here we have a list of objects of the Integer class. We add elements of the primitive type, and automatic autoboxing happens.
Another example would be when we have a method that accepts a Character object as a parameter. We can pass it a value of primitive type char, like in the following example.
Example 3:
class Test { public void printCharacter(Character character) { System.out.println("Character: " + character); } public static void main(String[] args) { Test test = new Test(); char ch = 'c'; test.printCharacter(ch); } }
Java Unboxing – Wrapper Objects to Primitive Types
In the case of unboxing, the Java compiler will convert the object of the Wrapper class into the primitive type.
Example 1:
class Test { Integer id = 10; int id1 = id; // unboxing }
Also, we can pass an appropriate wrapper object to a method that expects a primitive type.
Example 2:
class Test { public void printDouble(double d) { System.out.println("Double value: " + d); } public static void main(String[] args) { Test test = new Test(); Double d = 5.2; test.printDouble(d); } }