Read this article on wikipedia. It might help: http://en.wikipedia.org/wiki/Object_type_(object-oriented_programming)#Autoboxing
In computer science, an object type
(a.k.a. wrapping object) is a datatype
which is used in object-oriented
programming to wrap a non-object type
to make it look like a dynamic object.
Some object-oriented programming
languages make a distinction between
reference and value types, often
referred to as objects and non-objects
on platforms where complex value types
don't exist, for reasons such as
runtime efficiency and syntax or
semantic issues. For example, Java has
primitive wrapper classes
corresponding to each primitive type:
Integer and int, Character and char,
Float and float, etc. Languages like
C++ have little or no notion of
reference type; thus, the use of
object type is of little interest.
Boxing is the process of placing a
primitive type within an object so
that the primitive can be used as a
reference object. For example, lists
may have certain methods which arrays
might not, but the list might also
require that all of its members be
dynamic objects. In this case, the
added functionality of the list might
be unavailable to a simple array of
numbers. For a more concrete example,
in Java, a LinkedList can change its
size, but an array must have a fixed
size. One might desire to have a
LinkedList of ints, but the LinkedList
class only lists references to dynamic
objects — it cannot list primitive
types, which are value types.
To circumvent this, ints can be boxed
into Integers, which are dynamic
objects, and then added to a
LinkedList of Integers. (Using generic
parameterized types introduced in J2SE
5.0, this type is represented as LinkedList.) On the other
hand, C# has no primitive wrapper
classes, but allows boxing of any
value type, returning a generic Object
reference.
The boxed object is always a copy of
the value object, and is usually
immutable. Unboxing the object also
returns a copy of the stored value.
Note that repeated boxing and unboxing
of objects can have a severe
performance impact, since it
dynamically allocates new objects and
then makes them eligible for Garbage
collection.