美文网首页
Attempt to invoke virtual method

Attempt to invoke virtual method

作者: sexyhair | 来源:发表于2018-06-01 21:55 被阅读0次

日志信息:

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()方法

相关文章

网友评论

      本文标题:Attempt to invoke virtual method

      本文链接:https://www.haomeiwen.com/subject/loxlsftx.html