探讨jdk标准库中Map接口的put方法

今天偶然之间,发现Map接口的put方法的使用问题,先看下面代码:

public class TestMap {

 public static void main(String[] args) {
  Map m1 = new HashMap();
  m1.put(null, null);
  System.out.println("m1.size="+m1.size());
  Map m2 = new TreeMap();
  m2.put(null, null);
  System.out.println("m1.size="+m2.size());
  Map m3 = new Hashtable();
  m3.put("key", null);
  
 }
}
这段代码的打印输出是:

m1.size=1
m1.size=1
Exception in thread "main" java.lang.NullPointerException
        at java.util.Hashtable.put(Hashtable.java:396)
        at TestMap.main(TestMap.java:16)

我们可以发现HashMap与TreeMap的key与value都可以为null, 而HashTable则都不可以为null,为什么会这样?最后,我查看了API文档,文档分别说明如下:

HashMap与TreeMap的返回值说明文档如下:

previous value associated with specified key, or null if there was no mapping for key. A null return can also indicate that the HashMap previously associated null with the specified key.

而HashTable的返回值说明文档如下:

the previous value of the specified key in this hashtable, or null if it did not have one.

而且HashTable的异常文档明确说明:

NullPointerException - if the key or value is null.

所以上面代码的结果应该是正确的,但是我有一点疑惑,若是key/value可以为null,那么某次我用get方法返回的值为null的话,不能确定上因为没有这个值,还是这个值确实是为null.

总之,我认为我们没有必要每次都要检测从Map取出的value,因为在很多时候都是我们自己在组织Map对象, 但是这还是带来了问题,假如我使用的某个接口返回值是Map类型,但是我们不知道该对象到底时什么具体类型,在取值时,是否需要检测取出的值.我想这要看什么情况了,不过,我想我是从来不检测这些值的.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值