【发布时间】:2021-11-01 14:54:24
【问题描述】:
最近在一次编程竞赛中(我使用了 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.get(i) == list2.get(i)==0" - This does not compile. -
Integer是一个对象。因此,与int不同,您不能仅将它们与==进行比较,应该使用equals。将整数与==进行比较适用于特定范围(-127 到 128 afaik)的事实是因为值的对象在内部被缓存和重用。见stackoverflow.com/questions/20897020/… -
"Integer.compare(list1.get(i), list2.get(i))==0" 已编辑。 @图灵85
-
我建议使用
Objects.equals(list1.get(i), list2.get(i))。这在语义上等同于Integer.compare(list1.get(i), list2.get(i))==0,但 a) 更易于阅读和理解 b) 避免了不必要的拆箱。
标签: java integer comparison