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

时间:2013-07-16 16:59:03

标签: java types

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

Integer i = 10; 
Integer j = new Integer(10); 
int k = 10;

我们比较它们的平等性,得到i == kj == k但不是i==j

这是什么原因?

2 个答案:

答案 0 :(得分:5)

由于i的类型为Integerk的类型为int,因此表达式i == k会触发unboxing:它等同于{{ 1}}(即使i.intValue() == k为空,它也会引发NullPointerException。同样适用于i。但由于j == ki都具有类型j,因此不执行自动装箱,因此Integer只是检查它们是否是同一个对象 - 同一个{{1}的实例1}}。

答案 1 :(得分:0)

因为k是原始的,当你将它与其他人比较时,你只比较它的整数值。但是其他两个是对象。将它们与==运算符进行比较时,只检查它们是否是同一个对象。

您应该使用equals()方法来比较Integer个对象。以下内容将在您的程序中返回true

i.equals(j);