java中特有的平等行为

java中特有的平等行为,java,core,Java,Core,今天我遇到了Equality操作符的特殊行为 我认为答案是错误的。我们正在测试引用是否相等 毕竟,在这里——当你把两个值框起来时,它们会被放在不同的框中,即使值是相同的,对吗 Object x = 129; Object y = 129; boolean equality = (x == y); System.out.println(equality); 输出:FALSE Object x = 12; Object y = 12; boolean equality = (x == y); Sy

今天我遇到了Equality操作符的特殊行为

我认为答案是错误的。我们正在测试引用是否相等 毕竟,在这里——当你把两个值框起来时,它们会被放在不同的框中,即使值是相同的,对吗

Object x = 129;
Object y = 129;
boolean equality = (x == y);
System.out.println(equality);
输出:FALSE

Object x = 12;
Object y = 12;
boolean equality = (x == y);
System.out.println(equality);
输出:真


有人能帮我理解为什么会这样吗

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

Integer是int的包装类

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

where int!=int将比较这些值

如前所述,值-128到127被缓存,因此为这些值返回相同的对象。这就是为什么输出为true

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

要获得正确的输出: 1.使类型为int或

2.将类型强制转换为int或


3.Use.equals()

==是一个参考比较。它查找“相同”对象,而不是“相似”对象。 由于从缓存返回-128到127之间的值,并且返回相同的引用,所以第二次比较返回true。 但是高于127的值不会从缓存返回,因此引用不同,并且第一次比较返回false

好问题:顺便说一句:)

这是一个“不要上当…”;-)