从答案question about primitive types and autoboxing in java:
for biziclop:
class biziclop {
public static void main(String[] args) { System.out.println(new Integer(5) == new Integer(5)); System.out.println(new Integer(500) == new Integer(500)); System.out.println(Integer.valueOf(5) == Integer.valueOf(5)); System.out.println(Integer.valueOf(500) == Integer.valueOf(500)); }
}
结果:
C:\Documents and Settings\glow\My Documents>java biziclop false false true false C:\Documents and Settings\glow\My Documents>
为什么?
答案 0 :(得分:3)
Integer.valueof根据Java语言规范的要求缓存对象的值为零。
受到ilya's answer的启发,请参阅即将发布的JDK7中的the latest, actual source for Integer.valueOf(),第638-643行。
答案 1 :(得分:3)
参见Integer.valueOf实现:http://docjar.com/html/api/java/lang/Integer.java.html(850s行)
答案 2 :(得分:1)
您应该使用equal方法而不是==运算符。 ==测试两个对象是否相等,但是你创建了具有相同值的不同对象,并且需要equal()
方法来比较对象的值。
更新:
Integer.valouOf(5)
和Integer.valouOf(500)
的不同行为的原因确实是Integer实现使用大小为-128..127的静态valueOfCache。
从Java 7开始,可以使用命令行参数-XX:AutoBoxCacheMax=<size>
答案 3 :(得分:1)
Integer.valueOf缓存值,特别是-128到127。