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