OCJP 6 試験の問題なので、意図的に完全に正しくはありません (合法ですが)。
与えられたコード:
class ToDos {
String day;
public ToDos(String d) {
day = d;
}
public boolean equals(Object o) {
return ((ToDos) o).day == day;
}
public int hashCode() { return 9; }
}
public class MapEQ {
public static void main(String[] args) {
Map<ToDos, String> map = new HashMap<ToDos, String>();
ToDos t1 = new ToDos("Monday");
ToDos t2 = new ToDos("Mond" + "a" + "y");
ToDos t3 = new ToDos("Tuesday");
map.put(t1, "a");
map.put(t2, "b");
map.put(t3, "c");
System.out.println(map.size());
}
}
なぜ出力は 2 なのですか? つまり、equals
メソッドは正しくオーバーライドされていないため、t1.day == t2.day
false であるはずです! 私は何かを見逃していますか?