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