Objects that can change are hard to share safely, since any holder of a reference can modify them under you. An immutable class cannot change after it is built, like String and Integer. Use it for values such as money amounts, dates or map keys, and when objects are shared between threads. Making fields final is not enough on its own, because a final list can still be modified unless you make defensive copies.