Hi,
ich habe eine Klasse Student, welche nur aus long matrikelnummer und String name besteht.
Wenn ich nun die Equals() sowie die hashCode() Methode entsprechend überschreibe,
dann wird mir in zwei ArrayListen al1 und al2 equals true ausgeben, wenn ich vorher
diesen Code geschrieben habe:
Dies ist auch vollkommen verständlich, weil die ArrayListen den gleichen(->equals,hashcode)
Inhalt in der gleichen Reihenfolge enthalten.
Nun habe ich aber die Aufgabe herauszufinden, ob es möglich ist,
falls equals und hashcode nicht überschrieben, auch true herauskommen könnte. Und falls ja,
wie?
Ich habe nun versucht einfach das equals() und hashCode() auszukommentieren, aber da kommt false heraus(Was meinen Verständnis nach auch total korrekt ist, aber der Aufgabe ja nicht entgegen kommt).
Meine Frage ist also, ob es in irgendeiner Form möglich ist, equals() und hashCode() nicht
zu überschreiben und dennoch in zwei Listen ein equals()->true herauszubekommen?
Diese würde meiner Meinung nach nur bei den elementaren Typen gehen(weil diese in Wrapper verpackt werden und dort equals überschrieben ist) oder zb.: mit Strings(weil dort auch die beiden
Methoden überschrieben sind).
Geht das denn in irgend einem Fall auch für "eigene" Klassen???
EDIT:
ich glaube ich habe die Lösung schon gefunden, nämlich:
Dies ist true, obwohl Student equals() und hashcode() auskommentiert hat, weil
s1 ind beiden Arraylisten steckt UND da die equals() Methode nicht überschrieben, wird
diese von Object genommen, welche prüft ob es das SELBE(nicht gleiche!) Objekt ist,
und das ist true.
Gut, kann es noch einen anderen Fall geben?
Und warum zeigt dann s1 sowie s2,
Nicht direkt auf das selbe Objekt? Warum wird quasi zweimal das gleiche Objekt im
Heap erzeugt und nicht wie zb.: bei Strings darauf geachtet, dass beide gleich sind
und nur eines?
ich habe eine Klasse Student, welche nur aus long matrikelnummer und String name besteht.
Wenn ich nun die Equals() sowie die hashCode() Methode entsprechend überschreibe,
dann wird mir in zwei ArrayListen al1 und al2 equals true ausgeben, wenn ich vorher
diesen Code geschrieben habe:
Java:
Student s1 = new Student(123123,"Muster");
Student s2 = new Student(123123,"Muster");
ArrayList al1 = new ArrayList();
ArrayList al2 = new ArrayList();
al1.add(s1);
al2.add(s2);
System.out.println(al1.equals(al2));
Dies ist auch vollkommen verständlich, weil die ArrayListen den gleichen(->equals,hashcode)
Inhalt in der gleichen Reihenfolge enthalten.
Nun habe ich aber die Aufgabe herauszufinden, ob es möglich ist,
falls equals und hashcode nicht überschrieben, auch true herauskommen könnte. Und falls ja,
wie?
Ich habe nun versucht einfach das equals() und hashCode() auszukommentieren, aber da kommt false heraus(Was meinen Verständnis nach auch total korrekt ist, aber der Aufgabe ja nicht entgegen kommt).
Meine Frage ist also, ob es in irgendeiner Form möglich ist, equals() und hashCode() nicht
zu überschreiben und dennoch in zwei Listen ein equals()->true herauszubekommen?
Diese würde meiner Meinung nach nur bei den elementaren Typen gehen(weil diese in Wrapper verpackt werden und dort equals überschrieben ist) oder zb.: mit Strings(weil dort auch die beiden
Methoden überschrieben sind).
Geht das denn in irgend einem Fall auch für "eigene" Klassen???
EDIT:
ich glaube ich habe die Lösung schon gefunden, nämlich:
Java:
Student s1 = new Student(123123,"Muster");
ArrayList al1 = new ArrayList();
ArrayList al2 = new ArrayList();
al1.add(s1);
al2.add(s1);
System.out.println(al1.equals(al2)); //true
Dies ist true, obwohl Student equals() und hashcode() auskommentiert hat, weil
s1 ind beiden Arraylisten steckt UND da die equals() Methode nicht überschrieben, wird
diese von Object genommen, welche prüft ob es das SELBE(nicht gleiche!) Objekt ist,
und das ist true.
Gut, kann es noch einen anderen Fall geben?
Und warum zeigt dann s1 sowie s2,
Java:
Student s1 = new Student(123123,"Muster");
Student s2 = new Student(123123,"Muster");
Heap erzeugt und nicht wie zb.: bei Strings darauf geachtet, dass beide gleich sind
und nur eines?
Zuletzt bearbeitet: