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