equals() が明らかにオーバーライドされていることに驚きましたArrayList<String>
。Collection<> の contains() は、参照ではなく、明らかに値を比較するためです。もちろん、 の場合Collection<Object>
、参照は比較されます。以下のプログラムでは、2 行目で false になるべきではありませんか?
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