对象之间的平等如何完成?

0 java types

如果我们使用不同的声明语句创建3个int类型的变量,例如,

Integer i = 10; 
Integer j = new Integer(10); 
int k = 10;
Run Code Online (Sandbox Code Playgroud)

而我们比较它们是否相等,我们得到i == kj == k,但不会i==j.

这是什么原因?

rua*_*akh 5

由于i具有类型Integerk类型int,表达式i == k触发拆箱:它等同于i.intValue() == k(甚至到它将引发NullPointerExceptionif i为null的点).同样的j == k.但由于i并且j两者都有类型Integer,因此不会执行自动装箱,因此i == j只需检查它们是否是同一个对象 - 相同的实例Integer.