Java Reference
In-Depth Information
deep copy , meaning that if the field is of an object type, the object's reference is copied rather
than its contents.
deep copy
house1: House
house1: House
Memory
Memory
id = 1
area = 1750.50
whenBuilt
1
id = 1
area = 1750.50
whenBuilt
1
1750.50
1750.50
whenBuilt: Date
whenBuilt: Date
reference
reference
date object
contents
date object
contents
house2 =
house1.clone()
house2 =
house1.clone()
house2: House
house2: House
Memory
Memory
id = 1
area = 1750.50
whenBuilt
id = 1
area = 1750.50
whenBuilt
1
1
whenBuilt: Date
1750.50
1750.50
date object
contents
reference
reference
(a)
(b)
F IGURE 13.6
(a) The default clone method performs a shallow copy. (b) The custom clone method performs a deep
copy.
To perform a deep copy for a House object, replace the clone() method in lines 26-28
with the following code:
deep copy
public Object clone() throws CloneNotSupportedException {
// Perform a shallow copy
House houseClone = (House) super .clone();
// Deep copy on whenBuilt
houseClone.whenBuilt = (java.util.Date)(whenBuilt.clone());
return houseClone;
}
or
public Object clone() {
try {
// Perform a shallow copy
House houseClone = (House) super .clone();
// Deep copy on whenBuilt
houseClone.whenBuilt = (java.util.Date)(whenBuilt.clone());
return houseClone;
}
catch (CloneNotSupportedException ex) {
return null ;
}
}
Now if you clone a House object in the following code:
House house1 = new House( 1 , 1750.50 );
House house2 = (House)house1.clone();
house1.whenBuilt == house2.whenBuilt will be false . house1 and house2 contain
two different Date objects, as shown in Figure 13.6b.
 
 
Search WWH ::




Custom Search