equals Methode bei String

Strim

Mitglied
Hallo,

um die equals Methode effektiv zu verwenden muss man sie ja eigentlich den Bedingungen entsprechend überschreiben. Unüberschrieben sieht sie ja so aus:

Java:
public boolean equals(Object obj) {
  return (this == obj);
}

Aber wieso funktioniert sie dann für Strings?
Beim Vergleich von Strings habe ich noch nie etwas gelesen vom Überschreiben der equals Methode, damit sie Strings effektiv vergleicht. Eigentlich dürfte sie doch unüberschrieben bei Strings genau so wie bei anderen Objekten auch nur die Referenz vergleichen oder?
Aber trotzdem wird sie unüberschrieben immer für den Vergleich von Strings benutzt.

Kann mir das bitte jemand erklären? Würde mich freuen.

MfG,
Tim
 
Hallo,

um die equals Methode effektiv zu verwenden muss man sie ja eigentlich den Bedingungen entsprechend überschreiben. Unüberschrieben sieht sie ja so aus:

Java:
public boolean equals(Object obj) {
  return (this == obj);
}

Aber wieso funktioniert sie dann für Strings?
Beim Vergleich von Strings habe ich noch nie etwas gelesen vom Überschreiben der equals Methode, damit sie Strings effektiv vergleicht. Eigentlich dürfte sie doch unüberschrieben bei Strings genau so wie bei anderen Objekten auch nur die Referenz vergleichen oder?
Aber trotzdem wird sie unüberschrieben immer für den Vergleich von Strings benutzt.

Kann mir das bitte jemand erklären? Würde mich freuen.

MfG,
Tim

???:L:bahnhof: Die String-Klasse (java.lang.String) überschreibt doch die equals-Methode....
 
ja macht sie...

Java:
    /**
     * Compares this string to the specified object.  The result is {@code
     * true} if and only if the argument is not {@code null} and is a {@code
     * String} object that represents the same sequence of characters as this
     * object.
     *
     * @param  anObject
     *         The object to compare this {@code String} against
     *
     * @return  {@code true} if the given object represents a {@code String}
     *          equivalent to this string, {@code false} otherwise
     *
     * @see  #compareTo(String)
     * @see  #equalsIgnoreCase(String)
     */
    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = count;
            if (n == anotherString.count) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = offset;
                int j = anotherString.offset;
                while (n-- != 0) {
                    if (v1[i++] != v2[j++])
                        return false;
                }
                return true;
            }
        }
        return false;
    }
 
Zuletzt bearbeitet:
und
Java:
 if (this == anObject) {
            return true;
        }
übernimmt man von der equals-Methode damit er falls man ein Objekt mit sich selbst vergleicht direkt true zurückgeben kann und das Folgende nicht durchgehen muss richtig?
 
Referenzvergleich ist recht günstig, daher ist es eine gute Wahl diesen Vergleich zuerst zu prüfen.
Bei komplexen Objekten müssen dann meist mehrere Attribute verglichen werden, daher sollte man einfache Dineg vorher ausschließen.
 

Zurück
Oben