Question about cloning in Java
Posted
by devoured elysium
on Stack Overflow
See other posts from Stack Overflow
or by devoured elysium
Published on 2010-05-23T00:58:25Z
Indexed on
2010/05/23
1:00 UTC
Read the original article
Hit count: 283
In Effective Java, the author states that:
If a class implements Cloneable, Object's clone method returns a field-by-field copy of the object; otherwise it throws CloneNotSupportedException.
What I'd like to know is what he means with field-by-field copy. Does it mean that if the class has X bytes in memory, it will just copy that piece of memory? If yes, then can I assume all value types of the original class will be copied to the new object?
class Point {
private int x;
private int y;
@Override
public Point clone() {
return (Point)super.clone();
}
}
If what Object.clone()
does is a field by field copy of the Point
class, I'd say that I wouldn't need to explicitly copy fields x
and y
, being that the code shown above will be more than enough to make a clone of the Point
class. That is, the following bit of code is redundant:
@Override
public Point clone() {
Point newObj = (Point)super.clone();
newObj.x = this.x; //redundant
newObj.y = this.y; //redundant
}
Am I right?
I know references of the cloned object will point automatically to where the original object's references pointed to, I'm just not sure what happens specifically with value types. If anyone could state clearly what Object.clone()
's algorithm specification is (in easy language) that'd be great.
Thanks
© Stack Overflow or respective owner