我很惊讶地看到 equals() 显然被ArrayList<String>
. 因为 Collection<> 中的 contains() 显然比较的是值,而不是引用。当然,对于Collection<Object>
,会比较引用。在下面的程序中,我不应该在第二行得到错误吗?
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<String>();
al.add("Obama");
al.add("Reagan");
al.add("Bush");
al.add("Nyquist");
StringBuffer sb = new StringBuffer();
sb.append("Bush");
System.out.println("compares values? using constants " + al.contains("Bush"));
System.out.println("compares values? using local variable " + al.contains(sb.toString()));
}
run:
compares values? using constants true
compares values? using local variable true