0

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

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

我们比较它们是否相等,我们得到i == k andj == k但不是i==j

这是什么原因?

4

2 回答 2

5

由于ihas typeIntegerkhas type int,表达式i == k触发拆箱:它等价于i.intValue() == k(甚至到它会引发一个NullPointerExceptionifi为 null 的程度)。同样对于j == k。但是因为iandj都有 type Integer,所以不会执行自动拆箱,所以i == j只需检查它们是否是同一个对象——同一个Integer.

于 2013-07-16T17:02:23.460 回答
0

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

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

i.equals(j);
于 2013-07-16T17:01:32.937 回答