Ich habe dieses Programm:
import java.util.*;
public class test {
private String s;
public test(String s) { this.s = s; }
public static void main(String[] args) {
HashSet<Object> hs = new HashSet<Object>();
test ws1 = new test("foo");
test ws2 = new test("foo");
String s1 = new String("foo");
String s2 = new String("foo");
hs.add(ws1);
hs.add(ws2);
hs.add(s1);
hs.add(s2); // removing this line also gives same output.
System.out.println(hs.size());
}
}
Beachten Sie, dass dies keine Hausaufgabe ist. Diese Frage wurde uns heute in unserem Quiz gestellt. Ich kenne die Antworten, aber ich versuche zu verstehen, warum das so ist.
Das obige Programm liefert 3 als Ausgabe.
Kann mir bitte jemand erklären, warum das so ist?
Ich glaube (nicht sicher):
El java.lang.String
Klasse überschreibt die hashCode
Methode von java.lang.Object
. Also die String
Objekte mit dem Wert "foo" werden als Duplikate behandelt. Die Testklasse überschreibt nicht die hashCode
Methode und verwendet am Ende die java.lang.Object
Version und diese Version gibt immer einen anderen Hashcode für jedes Objekt zurück, so dass die beiden hinzugefügten Testobjekte als unterschiedlich behandelt werden.