我在Java中知道,下面有三种不同的方法可以将原始类型转换为相应的包装类。但是,如果性能至关重要,是否有任何首选方式?
Integer i = new Integer(5);
Integer i = 5;
Integer i = Integer.valueOf(5);
答案 0 :(得分:5)
Integer.valueOf(int)的javadoc发出了一个非常明确的建议:
如果不需要新的
Integer
实例, 通常应优先使用此方法,而不是构造函数Integer(int)
,因为此方法可能会产生明显更好的空间和时间性能 通过缓存经常请求的值。此方法将始终缓存-128
到127
范围内的值,并且可以缓存此范围之外的其他值。
正如Pshemo
在评论中所指出的那样,SO thread中考虑了Integer i = 5;
,Integer i = Integer.valueOf(5);
基本上会自动转换为new Integer(5)
。因此,使用“胜利”不会在性能方面产生影响。
因此,如果需要考虑性能,只需避免使用{{1}}从缓存中受益。