Attempt to invoke virtual method
2018-06-01 本文已影响0人
sexyhair
日志信息:
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference
引起此异常代码
HashMap<String ,Integer> map = new HashMap<String,Integer>();
int value = map.get("key")
就会报此异常。
查看HashMap#get()方法
public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
{
public V get(Object key) {
if (key == null)
return getForNullKey();
Entry<K,V> entry = getEntry(key);
return null == entry ? null : entry.getValue();
}
private V getForNullKey() {
if (size == 0) {
return null;
}
for (HashMapEntry<K,V> e = table[0]; e != null; e = e.next) {
if (e.key == null)
return e.value;
}
return null;
}
}
看HashMap#getForNullKey()中第一行,当size == 0 时会return null ,返回到int value = map.get("key")
即int value = null;就抛出了此异常;
衍生:
-
将null赋值给int是会报此异常,那么同理将null赋值给float、double、long会不会也报此异常?
-
源码中size = 0 时return null 那么几种情况导致map size = 0?
无put
调用clear()方法