2014-10-28 96 views
3
System.out.println(Integer.valueOf(5) == Integer.valueOf(5)); 
System.out.println(Integer.valueOf(500) == Integer.valueOf(500)); 

输出是为什么== Integer.valueOf(500)返回false,但是true为5?

true 
false 

为什么第一行返回true,但第二行返回false?这里有什么窍门,因为他们都在Integer上打电话valueOf()

+3

这是比较指针而不是整数。事实上,对于5,它返回相同的指针只是一个优化,一个实现细节。 (仅供参考,我根本不知道任何Java,我只是[阅读文档](http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html)... ) – 2014-10-28 19:49:36

+1

http://stackoverflow.com/questions/1514910/when-comparing-two-integers-in-java-does-auto-unboxing-occur – Pshemo 2014-10-28 19:49:37

+1

http://stackoverflow.com/questions/20897020/why-integer- class-caching-values-in-the-range-128-to-127 – khelwood 2014-10-28 19:50:27

回答

4

存在低编号整数对象的缓存实例,但没有任何更高值的整数对象。

如果您以前没有注意到,则是比较对象,而不是整数。

相关问题