我的目标是优化我的应用程序代码。我的代码如下所示:方法调用低效新的Integer(int)构造函数;使用Integer.valueOf(int)代替
int a = 10;
Map<String , Integer> myMap = new TreeMap<>();
myMap.put("first" , new Integer(a)); //[FindBugs] Method com.abc.xyz.Test.main(String[]) invokes inefficient new Integer(int) constructor; use Integer.valueOf(int) instead
当我在Netbeans中做静态分析FindBugs的,它表明,有像“方法警告/错误将调用低效新的整数(int)构造;使用Integer.valueOf( int)而不是“。
我知道新的整数(INT) VS Integer.valueOf(INT)之间的差异。
一个创建另一个对象,另一个不创建。另外一个不缓存和其他缓存。
,所以我必须再次修改我的代码是这样的...
m.put("first" , Integer.valueOf(a)); // Unnecessary boxing to Integer
但也给了警告“不必要的拳击整数”(由编辑器不FindBugs的)。
所以,我又改变了它这样的....
m.put("first" , a); //No warning at all...
其最后给出没有警告可言。
我的问题:
1)本link表明内部(由编译器)m.put( “第一”,一);正在转换m.put(“first”,Integer.valueOf(a));
(在这个例子中,有一个List-ArrayList,这里我们有Map-TreeMap ... FYI)。 那为什么编辑器会给出警告? 我该怎么办?优化的方式是什么?
2.)如果不是地图,如果有像的HashTable然后任何数据结构???
3.)为什么编辑给不必要的拳击Integer。
4.)为什么m.put(“first”,a)有效?因为我通过原始变量和地图的put()只接受对象。那么是因为汽车拳击?
是的,它是由于自动装箱。 – 2014-08-28 09:50:35
OK.thanks ...那么优化的好方法是什么?最后一个?? – 2014-08-28 09:53:50
我不认为你可以优化它,自动装箱为你做同样的工作,所以你不需要显式地执行'valueOf(a)'。 – 2014-08-28 09:55:50