慎用自动装箱

Java的自动装箱和自动拆箱确实提供了一点小方便。但是一旦出问题,还是很痛苦的。

1
2
3
     int x ;
    HashMap < String,Integer > map  =  new HashMap < String,Integer > ( ) ;
    x  = map. get ( "hello" ) ;

看上面的代码,看起来还算简介,但是从Integer直接拆箱到int,一个大问题就是,如果HashMap里没有hello,就出错了。

1
2
Exception in thread "main" java.lang.NullPointerException
    at Main.main(Main.java:15)

以上就是出错时的样子,指定的出错行在

1
x = map.get("hello");

通常,这个出错提示的第一反应是map是null,但是实际上确实因为自动拆箱un-boxing引起的。
这就是一个隐藏的bug,而且还要支持一点,这种box 和 un-box 是Java性能的明确的反模式。就是说,对性能不好。
所以还是老实的用Integer吧。
这里还想再唠叨几句,个人觉得,元数据类型的存在是多余的。什么int、float等等。既然java是完全的面向对象,为什么要有这种不是对象的东东?
个人认为使用Integer比int更为合理,而且可以拥有更强的表达力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值