慎用自动装箱

来源:互联网 发布:故宫淘宝 知乎 编辑:程序博客网 时间:2024/06/05 15:27

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更为合理,而且可以拥有更强的表达力。

0 0
原创粉丝点击