纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

HashMap get()的NullPointerException HashMap的get()方法的NullPointerException问题

ItsJingdai   2021-09-13 我要评论
想了解HashMap的get()方法的NullPointerException问题的相关内容吗ItsJingdai在本文为您仔细讲解HashMap get()的NullPointerException的相关知识和一些Code实例欢迎阅读和指正我们先划重点:HashMap,get,get()方法,NullPointerException下面大家一起来学习吧

HashMap的get()方法的NullPointerException

今天写代码发现一个 bugHashMap的 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 进行初始化不会是 nulldebug 中也验证了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 编程时需要注意

NullPointerException的一种情况

很久以前刚开始写代码的时候经常会从一些模板或者map、list或者一些对象里面取值

取到的值很可能是Object或某种类型 如果需要存储转化成String类型

我们会在后面加一个.toString()方法来强转

Map<String,Object> map = Maps.newHashMap();
String userName = map.get("username").toString();

如果我们取到了一个空值很可能会报空指针异常

我们可以尝试String mius = "";

String userName = map.get("username")+mius;

这样就不会报错了~

好久之前的小问题 分享一下 如有不足请补充希望能给大家一个参考也希望大家多多支持


相关文章

猜您喜欢

网友评论

Copyright 2020 www.sopisoft.net 【绿软下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式