用 == 比较 Integer 和 int

问题描述

mytool

以上条件导致 List<Integer> test = List.of(955,955); if (test.get(1) == test.get(0)) ...

false

上述条件返回List<Integer> test = List.of(955,955); int a = test.get(1); int b = test.get(0); if (a == b) ...

为什么会这样?片段之间有什么区别?

解决方法

在一种情况下,您要比较两个 Integer 对象引用。在另一种情况下,您要比较两个 int。使用 == 运算符比较对象引用时,如果它们不是同一个对象,即使它们包装了相同的值,它也会返回 False

,

第一个代码片段: 您正在比较对象引用,这意味着对象也指向特定的对象引用。在这种情况下,您正在比较一个整数,它是 int 的包装类。

第二个代码片段: 您正在将“int”与另一个“int”进行比较。

示例:

这样想:如果两个人都叫约翰,在第一个场景中,我们比较名为约翰的人,而在第二个场景中,我们只比较名字约翰。我希望有帮助!

,
  • 在第一个示例中,您正在比较引用。在您的示例中,您有两个具有不同引用和相同值的不同对象。

  • 在第二个示例中,您使用自动拆箱在堆栈内存中创建新整数,并使用整数比较按您的预期工作。自动拆箱会在 null 的情况下产生 NullPointerException。

,

对象应该与 .equals 方法进行比较。

List<Integer> test = List.of(955,955);
if (test.get(1).equals(test.get(0)))

原始类型(int、double、long...等)可以与 == 进行比较。

但是像 (Integer,Double,Long) 这样的对象必须与 .equals() 进行比较

如果你对对象使用 ==,那么将比较对象的引用,而不是对象包含的实际值。

正如 andrewjames 的评论所示,在某些极端情况下,== 似乎像下面的示例一样正确比较了 2 个整数对象,但这只是一个极端情况。 More info here

enter image description here