将整数加入集合Collection或Map中时,是直接将int原始类型加入还是变成Integer整数对象类型加入呢?这两者有什么区别?
JDK 1.5版引入了Java原语类型的自动装箱。这意味着当在需要引用类型的任何地方使用基本类型时,包装器类将自动创建。因此,在JVM的JDK 1.5版本之后,上述用例无需使用包装器类。Java装箱和原始类型的自动装箱将为您处理:
int x = 10; |
使用Java Flight Recorder和JDK Mission Control Eclipse插件对该程序进行快速分析会触发红色警告,将“原始到对象转换”标记为有问题。自动装箱导致性能问题。使用自动装箱功能时,Java Mission Control显示了垃圾回收例程会影响性能。
解决办法是加入整数型对象Integer,如:
map.put(Integer.valueOf(i), |
进行了这些较小的更改后,再次启动Java Flight Recorder时,Java原语类型装箱和拆箱性能问题就消失了。垃圾回收没有明显增加,并且在Java Flight Recorder运行之后,Java Mission Control不会报告任何原始到对象的转换问题。