Java Reference
In-Depth Information
We want the object created to be an independent copy of original . That would
not happen if we had used the following instead:
public Person(Person original) //Unsafe
{
if (original == null )
{
System.out.println("Fatal error.");
System.exit(0);
}
name = original.name;
born = original.born; //Not good.
died = original.died; //Not good.
}
Although this alternate definition looks innocent enough and may work fine in many
situations, it does have serious problems.
Assume we had used the unsafe version of the copy constructor instead of the one in
Display 5.19. The “Not good.” code simply copies references from original.born and
original.died to the corresponding arguments of the object being created by the con-
structor. So, the object created is not an independent copy of the original object. For
example, consider the code
Person original =
new Person("Natalie Dressed", new Date("April", 1, 1984), null );
Person copy = new Person(original);
copy.setBirthYear(1800);
System.out.println(original);
The output would be
Natalie Dressed, April 1, 1800-
When we changed the birth year in the object copy , we also changed the birth year in
the object original . This is because we are using our unsafe version of the copy con-
structor. Both original.born and copy.born contain the same reference to the same
Date object.
All this assumed that, contrary to fact, we have used the unsafe version of the copy
constructor. Fortunately, we used a safer version of the copy constructor that sets the
born instance variables as follows:
born = new Date(original.born);
which is equivalent to
this .born = new Date(original.born);
Search WWH ::




Custom Search