2011-03-08 26 views
2

从回答一个question about primitive types and autoboxing in java为什么在这个例子中的Integer.valueOf(...)比较返回不同的值?

为biziclop:

类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> 

这是为什么?

回答

1

您应该使用equal方法而不是==运算符。 ==测试两个对象是否相等,但您创建具有相同值的不同对象,并且需要使用equal()方法来比较对象的值。

更新:
原因的Integer.valouOf(5)Integer.valouOf(500)不同的行为确实是整数实现使用尺寸-128..127的静态valueOfCache。
从Java 7的这是与命令行参数-XX:AutoBoxCacheMax=<size>

+0

我并没有打算比较这些价值,但正在寻找一个解释,为什么两个比较的结果是不同的,而他们似乎在做同样的事情。 – steps 2011-03-08 21:32:31

1

Integer.valueOf缓存值,具体-128到127

相关问题