在线报名 | 加入收藏 | 学校地图

电话:400-0379-707 QQ:710034203

首页 > 学习园地 > Java学习 > 正文阅读

洛阳北大青鸟:Java自动拆箱的一个小纰漏 你注意到了吗?

发布时间:2013-04-01 15:43:36 点击:0
洛阳北大青鸟导读:自从有了范型,Java的容器操作便利了不少,但因为还存在int,float这里原始数据类型而磨合得还不够好.例如下面的这个小例子:Map map=new HashMap();map.put("1",1);System.out.println(map.get("2"));实际上map中...

 

自从有了范型,Java的容器操作便利了不少,但因为还存在int,float这里原始数据类型而磨合得还不够好.

例如下面的这个小例子:

Map map=new HashMap();

map.put("1",1);

System.out.println(map.get("2"));

实际上map中并没有键为"2"的值,不过代码运行正常,输出为

null

现在来做一点小改动,

Map map=new HashMap();

map.put("1",1);

int i=map.get("2");

System.out.println(i);

注意到只是用中间变量i暂时存放了一下取出的值,这个时候就会报错啦:Exception in thread "main" java.lang.NullPointerException

仔细想想倒也觉得错得在理,因为不存在的对象可以以null来表示,但不存在的数字在Java中却没有对应的表示(例如Ruby中就有NAN,表示这不是一个数字)。乍看之下好像也没什么大不了,但是这样的小缺陷使得在Java编程中想像一般类型一样的来使用数字和容器变得不太可能,如果用一个容器来做数字的存取,则只能在取之前很小心的先查看使用的键值对是否已经在容器中,而不能像一般对象的存取那样,直接取出,通过结果来判断罢了。

发现这个小纰漏仅在偶然间,JDK的文档我看得不多,也许SUN的工程师早就在哪里提醒过大家了吧,只是我孤陋寡闻而已,大家看着玩玩。

热词搜索: 洛阳北大青鸟 Java
分享该网页到:   转播到腾讯微博  分享到QQ空间
  • ①理论课
  • ②上机课
  • ③职业导向训练(COT)
  • ④指导学习课(DLC)
  • ⑤项目案例课
  • ⑥在线培训课(OLTL)
  • ⑦阶段项目课
  • ⑧毕业设计课
人才招聘 | 视频专区 | 专题活动 | 认证查询 | 网站地图