2014-09-16 2 views
1

Это дает исключение Null Pointer Exception, когда мы получаем размер после ввода нулевой карты в карту. Когда мы знаем, что HashMap разрешено указывать нулевое значение и ключ. Почему это происходит, когда мы кладем нулевую карту.Исключение Null Pointer для карты при получении размера

public static void main(String[] args){ 
     Map<String, Integer> n=new HashMap<String, Integer>(); 
     n.put("1", 1); 
     System.out.println(n.size()); 
     Map<String, Integer> nn=null; 
     n.putAll(nn); 
     System.out.println(n.size()); 
    } 

ответ

3

Вы не получаете вызов NPE n.size(); вы получаете NPE в предыдущей строке при вызове n.putAll(nn). Хотя отдельным ключам и значениям в HashMap разрешено быть null, аргумент карты putAll - нет. The documentation of HashMap.putAll говорит:

бросает NullPointerException - если указанная карта является нулем

Вы можете использовать непустой пустую карту, если вы хотите putAll 0 записей.

0

HashMap разрешает null значение, но весь объект не должен быть null.

putAll вызывает операции над коллекцией, которую вы пытаетесь добавить, и ее значение null.

0

Вы назначаете null к Nn здесь:

Map<String, Integer> nn=null; 

и положил другую карту здесь:

n.putAll(nn); 

Следовательно NPE

0
n.putAll(nn); 

бросает NPE. Если мы посмотрим на источник, первая линия HashMap.putAll(Map<K, V> map) является int numKeysToBeAdded = m.size();

С m в строке выше нулевой, NPE отбрасывается.

Смежные вопросы