java中的特殊平等行为

时间:2015-11-17 06:48:26

标签: java core

今天我遇到了公平运营商的特殊行为。

我希望答案是假的。我们正在测试参考平等 毕竟 - 毕竟当你装箱两个价值时,它们最终会出现在不同的方框中,即使价值相同,也是正确的

Object x = 129;
Object y = 129;
boolean equality = (x == y);
System.out.println(equality);

输出:错误

Object x = 12;
Object y = 12;
boolean equality = (x == y);
System.out.println(equality);

OUTPUT:TRUE

有人可以帮助我理解为什么这样做。

3 个答案:

答案 0 :(得分:1)

==是参考比较。它寻找"相同"对象代替"类似"宾语。 由于从缓存返回-128到127之间的值并返回相同的引用,因此第二次比较返回true。 但是高于127的值不会从缓存返回,因此引用不同,并且您的第一个比较返回false。

好问题顺便说一下:)

答案 1 :(得分:0)

始终建议使用object1.equals(onject2)检查是否相等,因为当您使用 == 进行比较时,参考比较而不是值。

答案 2 :(得分:0)

Integer是int的包装类。

Integer!= Integer比较它实际比较对象的实际对象引用

其中int!= int将比较值。

如前所述,缓存了-128到127的值,因此返回相同的对象。这就是输出为真的原因。

但如果在该范围之外,即(129),将创建单独的对象,因此引用将是不同的。这就是输出为假的原因

正确输出: 1.使类型为int或

2.将类型归类为int或

3.使用.equals()