如何处理HashMap中get()方法出现的NullPointerException问题,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
今天写代码发现一个 bug,HashMap的 get() 方法一直报空指针异常,现记录一下。
private HashMap<Integer, Integer> cache; private LinkedList<Integer> keyList; private int capacity; public LRUCache(int capacity) { cache = new HashMap<>(); keyList = new LinkedList<>(); this.capacity = capacity; } // Put it in the front if use public int get(int key) { keyList.remove(new Integer(key)); keyList.addFirst(key); return cache.get(key); }
最后一行的 cache.get(key) 一直报 NullPointerException。
首先,LRUCache 对象我是 new 出来的,在构造函数会对 cache 进行初始化,不会是 null,debug 中也验证了,cache 不是 null。
接着去查看 Java API,如下:
V get(Object key)
Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key.
Java API 明确说明当给定的 key 不存在时,会返回 null,不会抛出 NullPointerException 。
说明不是这里的问题,那既然会返回 null,好像懂了,如果 key 值不存在,当返回 null 时,如果用基本数据类型接收结果,如下面的代码。
public static void main(String[] args) { HashMap<Integer, Integer> map = new HashMap<>(); int i = map.get(5); }
这就会将 null 赋给 i ,这里会有一个自动拆箱过程,会调用返回值的 intValue() 方法并将结果赋值给 i,但是这个返回值是 null,那么 null.intValue() 便会出现 NullPointerException。
最开始的 return cache.get(key); 也是一样,返回值是 null,但是函数类型是 int,在转换时也出现了 NullPointerException。
所以虽然 HashMap 的 get() 方法不会出现 NullPointerException,但是在包装类和基本类型转换时还是可能会出现 NullPointerException ,编程时需要注意。
很久以前刚开始写代码的时候经常会从一些模板或者map、list或者一些对象里面取值
取到的值很可能是Object或某种类型 如果需要存储转化成String类型
Map<String,Object> map = Maps.newHashMap(); String userName = map.get("username").toString();
我们可以尝试String mius = "";
String userName = map.get("username")+mius;
关于如何处理HashMap中get()方法出现的NullPointerException问题问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。