Request for review: 7123229: (coll) EnumMap.containsValue(null) returns true

Neil Richards neil.richards at ngmr.net
Tue Jan 10 01:05:33 UTC 2012


Hi all,
When proposing the change for 6312706 [1], I erroneously managed to
convince myself (and others!) that it would be safe to use 'new
Integer(0)' for java.util.EnumMap.NULL (the object used to mark null
values for entries in the map) [2].

This was on the basis that I thought it was only compared by identity.
However, on closer inspection, this turns out not to be the case.

7123229 was raised to report the bug that was introduced based on this
invalid assumption.

I've created a webrev with a suggested fix for 7123229 [3], which
changes NULL to be an Object which:
      * will only return 'true' from equals(Object) for itself
      * returns 0 from hashCode()

For good measure, it also returns a sensible value from toString().

Please review this fix and let me know your thoughts,
Thanks,
Neil

[1] http://hg.openjdk.java.net/jdk7/tl/jdk/rev/c1e87a18e46a
[2] http://mail.openjdk.java.net/pipermail/core-libs-dev/2011-March/006353.html
[3] http://cr.openjdk.java.net/~ngmr/7123229/webrev.00/

-- 
Unless stated above:
IBM email: neil_richards at uk.ibm.com
IBM United Kingdom Limited - Registered in England and Wales with number 741598.
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU




More information about the core-libs-dev mailing list