Android Studio gives the warning: Unboxing of 'idCollisonMap.get(currentId)' may produce 'NullPointerException'
even though I am checking if the key exists before I perform the Map.get().
Am I actually in danger of running into a null pointer exception? My understanding is that .containsKey()
check would prevent this from happening.
Map<String, Integer> idCollisonMap = new HashMap<>(); // All IDs to map for (MyObject object : objectsWithIdList) { // Use the id as the key String currentId = object.getId(); // First check if the ID is null if (currentId != null) { if (idCollisonMap.containsKey(currentId)) { // This ID already exists in the map, increment value by 1 idCollisonMap.put(currentId, idCollisonMap.get(currentId) + 1); } else { // This is a new ID, create a new entry in the map idCollisonMap.put(currentId, 1); } } }
Code snippet sample output:
[{T143=1, T153=3, T141=1}]
Advertisement
Answer
Assuming nothing else is modifying the map, and if the map never contains null values, this looks safe to me – but you can avoid the warning and be more efficient at the same time, by unconditionally calling get
and using the result to handle missing keys as well:
Integer currentCount = idCollisionMap.get(currentId); Integer newCount = currentCount == null ? 1 : currentCount + 1; idCollisionMap.put(newCount);