"A shallow copy of an object is a copy in which only the primitive and reference values are copied to the new object. This means that object members like ints, floats, and booleans have the same values in both the new and the existing objects, but object members like arrays, Hashtables, Vectors and so on are shared between the new and existing objects.
A deep copy of an object differs from a shallow copy because all nonprimitive object members are cloned as well. In a deep copy, if an existing object has a Vector object as a member, a clone operation on the existing objects results in a new object being created that points to a new Vector object as well."
Taken from
Java Pitfalls: Time-Saving Solutions and Workarounds To Improve Programs. The chapter this excerpt is from from covers the whole clone() issue("Properly Cloning An Object").
Greetings,
Michael Herrmann