可能是重复的问题:
New Integer vs valueOf
我在一些地方读到过,Integer.valueOf比new Integer()更好,因为它允许编译器对值进行缓存。那么应该何时使用new Integer()而不是Integer.valueOf()呢?是否存在某种原因/场景,在这种情况下不应使用Interger.valueOf()?
谢谢
可能是重复的问题:
New Integer vs valueOf
我在一些地方读到过,Integer.valueOf比new Integer()更好,因为它允许编译器对值进行缓存。那么应该何时使用new Integer()而不是Integer.valueOf()呢?是否存在某种原因/场景,在这种情况下不应使用Interger.valueOf()?
谢谢
new Integer()
。如果你通过包装对象的身份来区分整数,那么你很可能没有在做一个合理的事情。System.out.println(new Integer(1)==new Integer(1)); // false
System.out.println(Integer.valueOf(1)==Integer.valueOf(1)); // true
new Integer(xxx)
容易被逃逸分析优化掉,而Integer.valueOf
则是一个愚蠢的决定,因为它无法进行逃逸分析(不确定返回值是否为新对象)。更糟糕的是,标准的-128 / +127范围可以是自定义值(通过-XX:AutoBoxCacheMax或-Djava.lang.Integer.IntegerCache.high)。 - bestsss