例如,如果我们使用不同的声明语句创建 3 个 int 类型的变量,
Integer i = 10;
Integer j = new Integer(10);
int k = 10;
我们比较它们是否相等,我们得到i == k
andj == k
但不是i==j
。
这是什么原因?
由于i
has typeInteger
和k
has type int
,表达式i == k
触发拆箱:它等价于i.intValue() == k
(甚至到它会引发一个NullPointerException
ifi
为 null 的程度)。同样对于j == k
。但是因为i
andj
都有 type Integer
,所以不会执行自动拆箱,所以i == j
只需检查它们是否是同一个对象——同一个Integer
.
因为k
是原始的,当你与其他人比较时,你只比较它的整数值。但其他两个是对象。当您将它们与==
运算符进行比较时,您只检查它们是否是同一个对象。
您应该使用equals()
方法来比较Integer
对象。以下将true
在您的程序中返回。
i.equals(j);