Primitive wrapper class in Java

This is an old revision of this page, as edited by Hervegirod (talk | contribs) at 15:00, 3 August 2008 (Use of primitive wrappers in reflection). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

A primitive wrapper class in the Java programming language is one of eight classes provided in the java.lang package to provide object methods for the eight primitive types. All of the primitive wrapper classes in Java are immutable. J2SE 5.0 introduced autoboxing of primitive types into their wrapper object, and automatic unboxing of the wrapper objects into their primitive value—the implicit conversion between the wrapper objects and primitive values.

Wrapper classes are used to represent primitive values when an Object is required. The wrapper classes are used extensively with Collection classes in the java.util package and with the classes in the java.lang.reflect reflection package.

The primitive wrapper classes and their corresponding primitive types are:

Primitive type Wrapper class Constructor Arguments
byte Byte byte or String
short Short short or String
int Integer int or String
long Long long or String
float Float float, double or String
double Double double or String
char Character char
boolean Boolean boolean or String

The Byte, Short, Integer, Long, Float, and Double wrapper classes are all subclasses of the Number class.

Use of primitive wrappers in reflection

When looking for methods with a particular signature, each argument of the method signature must defined using its corresponding Classes. To be able to define primitive arguments, each primitive type is associated with an immutable Class that represent this type when using reflection.

Suppose a class Foo with one method called doSomething, with one primitive int parameter. If we want to call this method using reflection, we will have to use the Type associated with the int primitive:

// Without reflection
Foo foo = new Foo();
foo.doSomething(1);

// With reflection
Class clazz = Class.forName("Foo");
Object foo = clazz.newInstance();
Class[] args = new Class[1];
args[0] = Integer.Type;
Method method = clazz.getMethod("hello", args);
method.invoke(foo, 1);

Void

Although it is not a wrapper class, the Void class is similar in that it provides an object representation of the void return type. The Void class is an uninstantiable placeholder class used by the java.lang.reflect API to hold a reference to the Class object representing the Java keyword void.

Atomic wrapper classes

With Java 5.0, additional wrapper classes were introduced in the java.util.concurrent.atomic package. These classes are mutable and cannot be used as a replacement for the regular wrapper classes. Instead, they provide atomic operations for addition, increment and assignment.

The atomic wrapper classes and their corresponding types are:

Primitive type Wrapper class
int AtomicInteger
long AtomicLong
boolean AtomicBoolean
V AtomicReference<V>

The AtomicInteger and AtomicLong classes are subclasses of the Number class. The AtomicReference class accepts the type parameter V that specifies the type of the object reference. (See "Generics in Java" for a description of type parameters in Java).

See also