A shallow copy just copies all mutable object references as is. A deep copy clones every object so that the references refer to different objects. Shallow copy: Shallow copy example
Deep copy example
Notice that in the deep copy I created a new double and copied the contents of it into my clone and I created a new Map with HashMap's copy constructor. Note that on the primitive int and the String member that there is no difference in the clone methods. The reason for this is that primitive instance variables of objects of the same class always have unique storage for each object. As for the String member, Strings are immutable so there is no danger that the cloned object could change the value of the String in the parent.
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius - and a lot of courage - to move in the opposite direction. - Ernst F. Schumacher