今天我遇到了公平运营商的特殊行为。
我希望答案是假的。我们正在测试参考平等 毕竟 - 毕竟当你装箱两个价值时,它们最终会出现在不同的方框中,即使价值相同,也是正确的
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
有人可以帮助我理解为什么这样做。
答案 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()