| Usage of `java.util.IdentityHashMap` with a boxed primitive type as a key is |
| risky and can yield unexpected results because `java.util.IdentityHashMap` uses |
| reference-equality when comparing keys and reference equality for primitive |
| wrappers is particularly bug-prone: Primitive wrapper classes cache instances |
| for some (but usually not all) values, so == may be equivalent to equals() for |
| some values but not others. Additionally, not all versions of the runtime and |
| other libraries use the cache in the same cases, so upgrades may change |
| behavior. |
| |
| Thus: |
| |
| ```java |
| Map<Integer, Foo> map = new IdentityHashMap<>(); |
| int n = randomInt(); |
| map.put(n, x); |
| map.get(n); // This could be null since boxing happens twice and could produce distinct values. |
| ``` |
| |
| But: |
| |
| ```java |
| Map<Integer, Foo> map = new IdentityHashMap<>(); |
| Integer n = randomInt(); |
| map.put(n, x); |
| map.get(n); // This cannot be null because it's the same instance. |
| ``` |