the JavaBeans pattern precludes the possibility of making a class immutable (Item 15), and requires added effort on the part of the programmer to ensure thread safety.
Note: why?
Lastly, they can be used to group methods on a final class, instead of extending the class.
Note: reread
For example, the keySet method of the Map interface returns a Set view of the Map object, consisting of all the keys in the map. Naively, it would seem that every call to keySet would have to create a new Set instance, but every call to keySet on a given Map object may return the same Set instance. Although the returned Set instance is typically mutable, all of the returned objects are functionally identical:
Note: reread
If a more complex comparison is required, compute a "canonical representation" for this field and invoke hashCode on the canonical representation.
Note: reread