java中特有的平等行为
今天我遇到了Equality操作符的特殊行为 我认为答案是错误的。我们正在测试引用是否相等 毕竟,在这里——当你把两个值框起来时,它们会被放在不同的框中,即使值是相同的,对吗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
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 好问题:顺便说一句:)这是一个“不要上当…”;-)