Java Reference
In-Depth Information
address of where the object is stored. This memory address is called a reference (to the
object). 1 This is diagrammed in Display 5.12.
Variables of a primitive type and variables of a class type are different for a reason. A
value of a primitive type, such as the type int , always requires the same amount of
memory to store one value. There is a maximum value of type int , so values of type
int have a limit on their size. However, an object of a class type, such as an object of
the class String , might be of any size. The memory location for a variable of type
String is of a fixed size, so it cannot store an arbitrarily long string. It can, however,
store the address of any string because there is a limit to the size of an address.
Because variables of a class type contain a reference (memory address), two variables
may contain the same reference, and in such a situation, both variables name the same
object. Any change to the object named by one of these variables will produce a change to
the object named by the other variable, because they are the same object. For example, con-
sider the following code. (The class ToyClass is defined in Display 5.11, but the meaning
of the code should be obvious and you should not need to look up the definition.)
references
ToyClass variable1 = new ToyClass("Joe", 42);
ToyClass variable2;
variable2 = variable1; //Now both variables name the same object.
variable2.set("Josephine", 1);
System.out.println(variable1);
The output is
Josephine 1
The object named by variable1 has been changed without ever using the name
variable1 . This is diagrammed in Display 5.13.
Variables of a Class Type Hold References
A variable of a primitive type stores a value of that type. However, a variable of a class type
does not store an object of that class. A variable of a class type stores the reference (mem-
ory address) of where the object is located in the computer's memory. This causes some
operations, such as = and == , to behave quite differently for variables of a class type than
they do for variables of a primitive type.
Reference Types
A type whose variables contain references are called reference types . In Java, class types
are reference types, but primitive types are not reference types.
1 Readers familiar with languages that use pointers will recognize a reference as another name for a
pointer. However, Java does not use the term pointer , but instead uses the term reference . Moreover, these
references are handled automatically. There are no programmer-accessible pointer (reference) operations
for de-referencing or other pointer operations. The details are all handled automatically in Java.
Search WWH ::




Custom Search