如果我们使用不同的声明语句创建3个int类型的变量,例如,
Integer i = 10;
Integer j = new Integer(10);
int k = 10;
我们比较它们的平等性,得到i == k
和j == k
但不是i==j
。
这是什么原因?
答案 0 :(得分:5)
由于i
的类型为Integer
且k
的类型为int
,因此表达式i == k
会触发unboxing:它等同于{{ 1}}(即使i.intValue() == k
为空,它也会引发NullPointerException
。同样适用于i
。但由于j == k
和i
都具有类型j
,因此不执行自动装箱,因此Integer
只是检查它们是否是同一个对象 - 同一个{{1}的实例1}}。
答案 1 :(得分:0)
因为k
是原始的,当你将它与其他人比较时,你只比较它的整数值。但是其他两个是对象。将它们与==
运算符进行比较时,只检查它们是否是同一个对象。
您应该使用equals()
方法来比较Integer
个对象。以下内容将在您的程序中返回true
。
i.equals(j);