Autoboxing and Unboxing are automatic type conversion features introduced in Java 5 that simplify the handling of primitive data types and their corresponding wrapper classes.

  • Autoboxing: Automatic conversion of a primitive type to its corresponding wrapper class.
  • Unboxing: Automatic conversion of a wrapper class object back to its primitive type.

These conversions occur implicitly, reducing boilerplate code and improving readability.

Example:

// Autoboxing: int → Integer
Integer obj = 10;  // Automatically converts primitive int to Integer
 
// Unboxing: Integer → int
int num = obj;  // Automatically converts Integer to int

Why use it?

  • Simplifies code: No need for manual conversion
  • Enhances Collection API usage: Collections in Java work with objects, not primitives
  • Improves readability: Eliminates explicit conversion methods

Performance Considerations

  • Autoboxing and Unboxing can have performance overhead!
  • Wrapper objects consume more memory than primitives.
  • Autoboxing creates unnecessary objects (affecting garbage collection).
  • Frequent conversions can impact performance in loops. Example:
Integer sum = 0;  // Unnecessary autoboxing in a loop
for (int i = 0; i < 1000; i++) {
    sum += i;  // Causes repeated boxing & unboxing
}