Java 中的整数比较

Integer comparisons in Java

最近在一次编程竞赛中(我使用 java8 尽管我可以使用任何其他语言),我遇到了这个问题。请帮助我了解问题。

我不得不在某一时刻写下这个声明。所有可见的测试用例都通过了。但是当我提交代码时,我可以看到 6/15 个测试用例失败了。

// list1 and list2 are ArrayList<Integer> type
if(list1.get(i) == list2.get(i){
...
...
}

不知道自己在想什么,把上面的代码改成这样了

if(Integer.compare(list1.get(i), list2.get(i))==0){
...
...
}

现在,所有的测试用例都通过了。 谁能帮我理解为什么第一个代码中的测试用例失败了?

0<=list1[i], list2[i]<=10^9

任何成功的比较都是偶然的,因为某些整数值的缓存或幸运地比较相同的对象引用。但是列表包含对象。在这种情况下,整数包装器 class。因此,请执行以下操作之一来测试是否相等。

if (list1.get(i).compareTo(list2.get(i)) == 0) {
...
}

if (list.get(i).equals(list2.get(i))) {
   ...
}

切勿使用 == 测试对象是否相等。始终使用 equals()。要进行 < and > 等不等式测试,请使用 compareTo Comparable interface Java 文档中定义的