Java自动拆箱的一个小纰漏

自从有了范型,Java的容器操作便利了不少,但因为还存在int,float这里原始数据类型而磨合得还不够好.
例如下面的这个小例子:
Map<String,Integer> map=new HashMap<String,Integer>();
map.put(
"1",1);
System.out.println(map.get(
"2"));
实际上map中并没有键为"2"的值,不过代码运行正常,输出为
    null
现在来做一点小改动,

   

Map<String,Integer> map=new HashMap<String,Integer>();
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的工程师早就在哪里提醒过大家了吧,只是我孤陋寡闻而已,大家看着玩玩。

posted on 2008-10-06 16:55 Jasper 阅读(64) 评论(0)  编辑  收藏 所属分类: Java技术


标题  
姓名  
主页
验证码 *  
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-10-06 17:02 编辑过
 
 

相关链接:
网站导航:



公告

邮箱:zhenandaci@msn.com

导航

<2008年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

统计

常用链接

留言簿(7)

随笔分类

随笔档案

文章分类

搜索

最新评论

阅读排行榜

评论排行榜

60天内阅读排行