[QUOTE=iKnwWhtUDidLast]
a) Ich wollte im Konstruktor nur andeuten (siehe // …), dass dort normalerweise Variablen übergeben werden, eine Prüfung auf null fehlt allerdings.
b) Es geht doch nur um den genauen inhaltlichen Vergleich von zwei Objekten, die api doc gibt auch nur Empfehlungen, beides gleichzeitig zu überschreiben/zu implementieren.
c) Das ist eine offene Frage, ob Instanzen von sub classes auch gleich der Oberklasse sein können oder nicht. Die IDE verwendet standardmäßig aber getClass().
d) Wieso nicht…
Also, wenn ich Zugang zum Wiki habe, stelle ich’s selber rein.[/QUOTE]
zu a) deute es nicht an, schreib es hin: das soll ein Übersichtsartikel für Anfänger sein!
zu b) das ist keine Empfehlung, das ist in der Praxis ein MUSS
zu c) du nimmst den von der IDE generierten Code und machst einen Artikel daraus??
zu d) überflüssiger Text, verwirrt nur, ist völlig sinnlos an der Stelle, lenkt ab…
Ich habe wirklich wenig Lust, deine Einträge im Wiki zu verbessern, da wird man ja nie fertig
Ohne dass man es angibt oder nicht, erben alle (selbst geschriebenen) Klassen implizit von der Klasse java.lang.Object . In Object ist die Methode equals(Object obj) deklariert/definiert:
ist völlig verblasen. Warum „Ohne dass man es angibt oder nicht“, das steht doch eh da.
Alle Klassen erben von java.lang.Object. Diese enthält die Standardimplementierung von equals:
Wie zu sehen ist, überprüft diese Methode auf referenzielle Gleichheit (Identität). Der Wert zweier Variablen ist nur identisch, wenn es sich um ein und dasselbe Objekt handelt (Datentyp: Referenz-Typ), also zwei Variablen dasselbe Objekt referenzieren/zeigen.
Oft will man aber den Inhalt von zwei Objekten vergleichen (inhaltliche Gleichheit (= Gleichheit)). Damit ist z. B. die Gleichheit aller Attribute/Objektvariablen von zwei Objekten/Klassen/Variablen gemeint. Deshalb muss die Methode equals() aus Objekt überschrieben werden. Standardmäßig überschreiben auch „alle“ Klassen der Java-SE-API diese Methode und geben eine richtige Implementierung / ein richtiges Verhalten vor. Beispiel String
ist auch so irre.
(inhaltliche Gleichheit (= Gleichheit))
Willst du das möglichst verwirrend gestalten oder was? Der Artikel sollte doch gerade erklären, was der Unterschied zwischen „inhaltlicher Gleichheit“ und „==“ überhaupt ist.
Damit ist z. B. die Gleichheit aller Attribute/Objektvariablen von zwei Objekten/Klassen/Variablen gemeint.
Der Satz setzt voraus, dass irgendwie klar ist, ob die Attribute mit == oder equals verglichen werden soll. Hier verwendest du einfach das Wort „Gleichheit“, so als ob das klar wäre. Ist es aber nicht, genau das soll dein Artikel doch klären.
Deshalb
Nein, nicht „deshalb“. Es ist eine semantische, eine Designentscheidung ob nicht == das „richtige“ ist, das hängt vom Kontext ab.
Standardmäßig überschreiben auch „alle“ Klassen der Java-SE-API diese Methode und geben eine richtige Implementierung / ein richtiges Verhalten vor.
Was soll ein Anfänger mit den Anführungszeichen bei „alle“ anfangen? Es gibt kein richtiges Verhalten, es gibt nur ein zweckmässiges Verhalten.
Und dann das Beispiel mit den Strings. Warum ausgerechnet die? Weil da die Compilertricks alles so schön kompliziert machen. Hättest du auch gleich Integer nehmen können, bei denen == für Zahlen zwischen -128 und 127 sogar funktioniert…
Warum nimmst du kein wirklich elementares Beispiel?
class A { private int a; ...}
und erklärst einfach kurz und bündig, was der Unterschied zwischen == und .equals ist?