int和Integer的不同行为

时间:2016-01-30 09:56:17

标签: java

我注意到以下代码返回false

Integer a = 600;
Integer b = 600; 
System.err.println(a == b);

但是这个

int a = 600;
int b = 600; 
System.err.println(a == b);

返回true

任何人都可以解释一下吗?

2 个答案:

答案 0 :(得分:1)

最重要的是要知道高达128的值被缓存,JVM为您提供相同的对象,因为参考比较有效。在128之上,它会创建一个新实例。

有关详细信息,请转到javadoc of Integer.valueOf(int)(这是幕后发生的事情)

答案 1 :(得分:0)

此行为是正确的,在java ==比较对象引用时,它会检查两个操作数是否指向同一个对象(不是等效对象,同一个对象)。 / p>

所以你的第一个例子:

 Integer a = 600;
 Integer b = 600;
 System.err.println(a == b);

你要求java告诉你是否有相同的引用,这是假的

示例2中的

a和b是原语,你要求java告诉你是否有相同的值,这是真的

Jeff已经找到this

的答案