Did the == operator look at the contents of the objects when the if
statement executed?
No. It only looked at the two reference variables.
They each held different references,
so the ==
evaluated to false.
Here is another example program:
class EgString5
{
public static void main ( String[] args )
{
String strA; // reference to the object
String strB; // another reference to the object
strA = new String( "The Gingham Dog" ); // Create the only object.
// Save its reference in strA.
System.out.println( strA );
strB = strA; // Copy the reference to strB.
System.out.println( strB );
if ( strA == strB )
System.out.println( "Same info in each reference variable." );
}
}
When this program runs,
only one object is created (by the new).
The unique reference to the object is put into strA.
The assignment operator in the statement
strB = strA; // Copy the reference to strB.
copies the reference that is in strA to strB.
It
does not make a copy of the object!
Or, saying nearly the same thing: making a copy of a reference to an object
does not make a copy of the object!
Since the same information is stored in strA as in strB,
either variable leads to the same object.
This is somewhat like giving your phone number to several people:
each copy of your phone number is a reference to you, but there is only one you.
The program will output:
The Gingham Dog The Gingham Dog Same info in each reference variable.
How many objects are there in this program? How many reference variables are there?