If the entry to change was mutable, its value is changed with Map.Entry#setValue and oldEntry and newEntry are the
same object. If the entry to change was not mutable, a new entry
must be created and oldEntry and newEntry are
different objects.

When a client directly invokes the Map.Entry#setValue method of
any of the Map.Entry implementations provided in this class,
this method is not invoked (while this could be addressed, it would
require each entry instance to hold a reference to its map).

If this map is canonical, eviction means the entry was converted to a
weak reference and mapChanged() was not invoked. If this
map is not canonical, eviction means the entry was removed and
mapChanged() was invoked.