When you print out object o, it holds Integer(3) because the one in 1 + Integer(2) is automatically boxed to the Integer class, then added to the other Integer.  Printing Integer(3) outputs a "3" to the screen.  In the same way, adding Integer(2) to 1 unboxes the Integer(2) to a primitive 2, and then adds 1 and 2 automatically for int x = 3.  Printing a primitive 3 also prints "3" to the screen. 