Thursday, October 6, 2011

Autoboxing and Unboxing Part - 1


Boxing/Unboxing
working with primitive types required the repetitive work of converting the primitive types into wrapper classes and vice - versa. Sometimes the purpose of conversion is just for some API call, after which the results have to be converted into original form which is very frustrating .Auto-boxing and Auto-Unboxing enables the primitive types to be converted into respective wrapper objects and the other way around.This article gives some insight about the importance of this new feature and how it can be used in the real-world programming. Let's take a small example of incrementing the value of Integer Object for understanding the concept of Boxing/Unboxing.
 
  Before Java 5

  int intPrimitive = intObject.intValue();
  intPrimitive++;
  intObject = new Integer(intPrimitive);

  Using Java 5

  Integer intObject = new Integer(10);
  intObject++;
 
The output for the above examples will be same. In the first example we are creating an Integer object, unwrapping it to primitive value, incrementing the primitive value, rewrapping it to Integer object again.

In the second example when the compiler encounters the line intObject++ compiler unwraps Integer object to primitive type, increments it and rewraps to Integer Object again,So When the compiler got to the line intObject++; it substitues the code which will be something like this:
 
  Integer.valueOf(intObject.intValue()+1);

  or

  int intPrimitive = intObejct.intValue();
  intPrimitive++;
  intObject = new Integer(intPrimitive);
 

Below example's show different ways of Boxing/Unboxing.
 
        
        Boolean isValid = false;              // Boxing

         Short shortObject = 200;               // Boxing

         if(shortObject<20){                     // unboxing
        }
       
          ArrayList<Integer> list = new ArrayList<Integer>();
            for(int i = 0; i < 10; i++){
             list.add(i);                     // Boxing
                 }

No comments: