美文网首页
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