【发布时间】:2017-03-09 20:15:41
【问题描述】:
只要运行以下代码,我就会得到 Stackoverflow。我无法理解为什么会这样?我们该如何解决?
public boolean compare(List<Task> source, List<Task> actual) {
return compareTasks(source, actual) && compare(actual, source);
}
public boolean compareTasks(List<Task> source, List<Task> actual) {
matchList = new ArrayList<Task>();
differList = new ArrayList<Task>();
for (Task task : actual) {
if (source.contains(task)) {
matchList.add(task);
} else {
differList.add(task);
}
}
return (differList.size() == 0) ? true : false;
}
以下是错误:
java.lang.StackOverflowError
at java.lang.StringBuilder.append(StringBuilder.java:119)
at com.user.test.Task.getKey(Task.java:209)
at com.user.test.Task.equals(Task.java:220)
at java.util.ArrayList.indexOf(ArrayList.java:216)
at java.util.ArrayList.contains(ArrayList.java:199)
at java.util.Collections$UnmodifiableCollection.contains(Collections.java:1000)
【问题讨论】:
-
小建议:如果你发现自己在写
blah ? true : false,就用blah。没有必要写“如果 blah 为真,则为真,如果为假,则为假”。所以在你的方法中,只需return differLists.size() == 0。 (类似地,不用blah ? false : true,只需使用!blah)。