【发布时间】:2021-08-21 00:08:31
【问题描述】:
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)
...
以上条件返回true。
为什么会这样? sn-ps有什么区别?
【问题讨论】:
-
区别在于自动拆箱。在第一次比较中,您使用
==比较两个Integer对象,这仅在它们是相同的对象 时为真(即,如果它们是具有相同值的不同对象,它们将不会比较相等) .在第二种情况下,您将它们都拆箱成int值,其中==比较实际值(因为这是int唯一拥有的东西)。 -
test.get(1)==test.get(0)比较引用相等性(因为test.get(...)返回Integer),而int a=test.get(1); int b=test.get(0); if(a==b) { ... }将Integers 自动装箱为ints,然后比较值相等性。
标签: java integer wrapper autoboxing unboxing