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 文档中定义的
最近在一次编程竞赛中(我使用 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 文档中定义的