Defensive copying involves making copies of objects passed into methods to prevent the caller from modifying the internal state of the object. It is not needed when objects are explicitly handed off in a constructor or when copying is too expensive, such as with model objects like those used by Hibernate.
2. Even though Java is a safe language, it is still
possible for programmers to make safe mistakes
and destroy the invariants of an object
8. When to not make defensive
When a collaborator is doing an explicit hand-off
of the object in the constructor
When it is very expensive to make copies
Model objects... eg: Hibernate pojo's