equals vergleich

sousou

Bekanntes Mitglied
Hallo zusammen,



Ich hab grad im Internet mal wieder gelesen das der Vergleich bei Equals im einfachsten Fall vom gleichen Typ ist. Das heisst wenn zwei Objekte den gleichen Typ haben dann ist das true.

Beispiel:
Java:
Buch o1 = new Buch();
Buch o2 = new Buch();

if (o1.equals(o2) ) { return true; } else { return false; }


Mich wunder aber folgendes:
Java:
class Buch{ 
  public boolean equals(Object other) {
    ...
    if (other.getClass() != getClass())
      return false;
    ...
  }

downcast.....
}
Weshalb das true ist, versteh ich nicht.... Da other.getClass den Namen der Oberklasse mit den Namen der Unterklasse vergleicht. Diese doch unterschiedlich da der Typ der Oberjkasse Object ist und der Typ der unterklasse den Typ hat in der sich equals befindet. Beispielsweise Buch.


Weshalb ist das denn true?
 
Zuletzt bearbeitet von einem Moderator:

sousou

Bekanntes Mitglied
wär wirklich sehr nett, wenn sich jemand bei der antwort ein bissien mühe gibt es mir etwas deutlich zu erklären.


DIe einen sagen es ist nicht mehr vom Typ Object die anderen sagen es ist vom Typ Buch.

Also was stimmmt jetzt?
 
S

SlaterB

Gast
bisschen rücksichtsvoller formulieren bitte,
wäre auch schön wenn deine Frage klarer wäre


> Weshalb ist das denn true?

worauf beziehst du dich?, auf die Aussage
Ich hab grad im Internet mal wieder gelesen das der Vergleich bei Equals im einfachsten Fall vom gleichen Typ ist. Das heisst wenn zwei Objekte den gleichen Typ haben dann ist das true.
das klingt sehr falsch, wo hast du das gelesen? wahrscheinlich nur falsch verstanden,

oder meinst du
> if (o1.equals(o2) ) { return true; } else { return false; }

da wird in einer unbekannten Methode true zurückgegeben, wenn zwei Objekte gleich sind,
das bedeutet nicht, dass die equals-Methode vom Typ der Objekte abhängt
 

sousou

Bekanntes Mitglied
doch habe ich !! Deine unsinnige vermutung ist nicht notwendig.



und das steht hier:
AngelikaLanger.com - Implementing the equals() Method - Part 1 - Angelika Langer Training/Consulting


Test auf Vergleichbarkeit
Nachdem getestet ist, dass other keine null-Referenz ist, wird auf Vergleichbarkeit geprüft. Interessanterweise ist das das kontroversesten Themen im Zusammenhang mit equals() überhaupt. Wir werden den Test auf Vergleichbarkeit in der nächsten Kolumne noch näher beleuchten. Hier nur ein erster Einblick in die Problematik.

Der Vergleichbarkeitstest ist nötig, weil equals() ein Argument vom Typ "Referenz auf Object" akzeptiert. Eine solche Referenz kann daher auf jede Art von Objekt zeigen und es ist keineswegs sicher gestellt, dass other auf ein Objekt desselben Typs wie this zeigt oder dass die referenzierten Objekte wenigstens in irgendeiner Form vergleichbar sind. Die Vergleichbarkeit muss daher durch einen expliziten Test feststellen.

Das heißt, man muss sich vor der Implementierung von equals(), genau genommen schon beim Design der Klasse, überlegen, mit welcher Art von Objekten ein Vergleich überhaupt möglich und sinnvoll ist. Im einfachsten Fall ist der Vergleich nur zwischen Objekten gleichen Typs erlaubt. Das sieht dann wie folgt aus:

public boolean equals(Object other) {
...
if (other.getClass() != getClass())
return false;
...
}
 
S

SlaterB

Gast
boah, du schlägst ja einen Ton an,
zum Glück bin ich noch mehr interessiert als empört,

auf der Seite sind gefühlt 500 Zeilen, die lese ich zumindest nicht durch ;)
bei Suche nach 'Typ' kam ich am ehesten noch auf die Sätze

> Hingegen ist der Vergleich immer dann möglich, wenn this und other von genau dem gleichen Typ sind.

> Im einfachsten Fall ist der Vergleich nur zwischen Objekten gleichen Typs erlaubt

welche aber nicht wirklich 'Das heisst wenn zwei Objekte den gleichen Typ haben dann ist das true.' bedeuten


edit: ah, jetzt hast du etwas mehr geschrieben, da kann ich das aber immer noch nicht rauslesen,
wenn der Typ nicht gleich ist, dann macht ein Vergleich keinen Sinn, dann kann man gleich false zurückgeben, so ist das zu interpretieren,
wenn der Typ gleich ist, dann wirds erst interessant, dann die Felder vergleichen usw.
 

eRaaaa

Top Contributor
Stimmt, es war eine Vermutung, und zwar vermute ich das, anhand deines folgenden Satzes:

Da other.getClass den Namen der Oberklasse mit den Namen der Unterklasse vergleicht. Diese doch unterschiedlich da der Typ der Oberjkasse Object ist und der Typ der unterklasse den Typ hat in der sich equals befindet

Das stimmt eben nicht und das kannst du so auch nicht sagen, da du nur aus der Methode heraus, doch gar nicht sagen kannst welches Objekt der Methode übergeben wird? Dich verunsichert immernoch das Object in der Signatur ...
Java:
	Object obj = new String("Hallo, ich bin ein String!)");
	System.out.println(obj.getClass());

= new .... darauf kommt es an! Auf obj kannst du jetzt zwar keine Methoden mehr aus String aufrufen (dafür müsstest du es halt wieder downcasten) aber es ist immer noch ein String !!!!!! Und genau das steht im Link...
 

sousou

Bekanntes Mitglied
Ja danke das is mir jedoch klar, zu den anderen da geht darum das ich nicht mag wenn jemand sachen behauptet was nicht stimmt, was man nicht wissen kann und dann noch einfach so einen unterstellt.

Das geht auch netter.

Die Frage von mir ist eigentlich nur warum obj in der Methode equals vom Typ Buch in der Klasse Buch ist und nicht vom Typ Object obwohl es mit dem Typ Object deklariert ist.


Die einzigste Antwort die ich hierzu bekommen war ist:

Weil in dem Falle Other nicht vom Typ Object, sondern auch vom Typ Buch ist.

Aber die begründung steht nicht da. Und etwas wissen ohne etwas begründet zu bekommen ist kein Wissen. Deswegen die Frage.

Das wärs auch.
 

sousou

Bekanntes Mitglied
achsoooooooooooooo era ich hab zu danken.

stimmt ab new weiß man zu welchen Objekt es gehört .

Ich gucks mir nochmal an, vielleicht kommt die in oder andere Frage.

THX!:):):):)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Date - Vergleich (equals / after) ? Java Basics - Anfänger-Themen 3
M Vergleich zweier Array Stellen mit equals/NullpointerException Java Basics - Anfänger-Themen 9
N Vergleich per equals Java Basics - Anfänger-Themen 5
G String-Vergleich: Was ist besser "equals()" oder & Java Basics - Anfänger-Themen 4
Say Equals Java Basics - Anfänger-Themen 6
W LocalDate vergleichen mit Equals? Java Basics - Anfänger-Themen 7
W Equals-Methode überschreiben bei composition Java Basics - Anfänger-Themen 20
W Wann und warum hashcode und equals? Java Basics - Anfänger-Themen 14
X Datentypen String.equals funktioniert nicht Java Basics - Anfänger-Themen 5
C Long value an Stringbuilder übergeben, equals Methode funktioniert nicht Java Basics - Anfänger-Themen 2
J compareTo()- und equals-Methode Java Basics - Anfänger-Themen 3
S 2 Strings mit Equals vergleichen Java Basics - Anfänger-Themen 11
lallmichnichtzu Methoden Überladen des .equals-Operators Java Basics - Anfänger-Themen 6
C Objekt1.equals(Objekt2) = immer false. Wieso? Java Basics - Anfänger-Themen 22
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
M Objekte mittels equals vergleichen Java Basics - Anfänger-Themen 14
S Interface Equals und hashCode Java Basics - Anfänger-Themen 16
G Java equals() Methode Java Basics - Anfänger-Themen 9
J equals funktioniert nicht - Warum Java Basics - Anfänger-Themen 13
G Ratlosigkeit zur Aufgabe im Anhang (boolean, equals.) Java Basics - Anfänger-Themen 20
D Unterschied == und equals in Arrays Java Basics - Anfänger-Themen 2
O equals Methode möglichst effizient Java Basics - Anfänger-Themen 13
H equals methode Java Basics - Anfänger-Themen 1
L Logistiksystem Methode equals und hashcode Java Basics - Anfänger-Themen 20
J Methoden Equals Methode für Integer und Objekte überschreiben? Java Basics - Anfänger-Themen 9
M Erste Schritte Mehrere eingaben in einer Line vergleichen (if equals...) Java Basics - Anfänger-Themen 6
I equals (Override) mit eigener Exception (keine Runtime-Exception) Java Basics - Anfänger-Themen 9
A OOP Richtige Verwendung von ArrayList und equals Java Basics - Anfänger-Themen 24
E equals Prüfung fehlgeschlagen Java Basics - Anfänger-Themen 3
C Objekt equals Java Basics - Anfänger-Themen 2
L String überprüfen mit .equals .contains oder .matches? Java Basics - Anfänger-Themen 1
H equals Methode Java Basics - Anfänger-Themen 1
F String equals NULL Problem Java Basics - Anfänger-Themen 4
D Auf equals von Vaterklasse zugreifen Java Basics - Anfänger-Themen 4
S Methoden equals(object o) / toString Java Basics - Anfänger-Themen 15
E Calender - Equals Problem Java Basics - Anfänger-Themen 14
T Datentypen compareTo() u. equals() bei Strings Java Basics - Anfänger-Themen 3
Psypsy hashCode, equals und toString Java Basics - Anfänger-Themen 3
K hashCode, compareTo vs. equals Java Basics - Anfänger-Themen 3
S Unterschiede zwischen equals und contains Java Basics - Anfänger-Themen 2
F Erste Schritte Hilfe bei Übung zu String equals() und Schleifen Java Basics - Anfänger-Themen 8
A Probleme mit equals und get.Text Java Basics - Anfänger-Themen 12
S compareTo() und equals() Java Basics - Anfänger-Themen 6
S equals Methode bei String Java Basics - Anfänger-Themen 5
R illegal start of expression - 3 Strings vergleichen mit .equals () Java Basics - Anfänger-Themen 5
K Cast bei equals Java Basics - Anfänger-Themen 2
T SQL equals Java Basics - Anfänger-Themen 4
OnDemand Methoden Equals Methde Java Basics - Anfänger-Themen 3
D if block mit equals im rumpf Java Basics - Anfänger-Themen 11
K Vererbung equals-Methode bei Vererbung abstrakter Klassen Java Basics - Anfänger-Themen 8
SexyPenny90 Wieso ist diese eigene Equals-Methode schlecht? Java Basics - Anfänger-Themen 17
K String - Equals Java Basics - Anfänger-Themen 2
J Klassen Warum ist (a.equals(b)) gleich (a==b)? Java Basics - Anfänger-Themen 13
B Warum gibst hier Equals false zurück ? Java Basics - Anfänger-Themen 23
S Verständnissfrage equals() Java Basics - Anfänger-Themen 2
R compareTo & equals Java Basics - Anfänger-Themen 10
M Verschiedene Möglichkeiten mit 'equals' abdecken? Java Basics - Anfänger-Themen 9
M Collections Problem bei Überschreibung von hashcode() und equals() bei Hashset-Implementierung Java Basics - Anfänger-Themen 5
W Stringvergleich mit equals Java Basics - Anfänger-Themen 13
C equals() Java Basics - Anfänger-Themen 4
D Problem mit string.equals bzw string.contains Java Basics - Anfänger-Themen 4
T Problem mit der while(!string.equals("x")) Java Basics - Anfänger-Themen 2
E Equals-Methode auf Class-Object Java Basics - Anfänger-Themen 17
X problem mit equals.gelöst Java Basics - Anfänger-Themen 2
J Methode equals() Java Basics - Anfänger-Themen 7
M Equals überschreiben Java Basics - Anfänger-Themen 3
K equals() und hashcode() überschreiben Java Basics - Anfänger-Themen 5
K equals in Hashmap() Java Basics - Anfänger-Themen 4
B if equals(irgendeine Zahl+Buchstabe) Java Basics - Anfänger-Themen 6
T equals() und hashCode() Java Basics - Anfänger-Themen 7
D probs mit clone und equals Java Basics - Anfänger-Themen 10
3 Collections containsKey() liefert false obwohl equals() true liefert Java Basics - Anfänger-Themen 6
S comparable und equals Java Basics - Anfänger-Themen 7
M Frage zu Textvergleich (equals) Java Basics - Anfänger-Themen 8
G Strings vergleichen mit equals, geht das kürzer? Java Basics - Anfänger-Themen 4
B Frage zu Funktion mit equals Java Basics - Anfänger-Themen 17
D Eigene equals methode schreiben Java Basics - Anfänger-Themen 4
J Gibt es eine möglichkeit ähnlich wie .equals(bedingung1 ||bedingung ..n) ? Java Basics - Anfänger-Themen 5
D "2010–03–12".equals( "2010-03-12" ) Java Basics - Anfänger-Themen 6
X Frage zur Implementierung von equals() Java Basics - Anfänger-Themen 2
T Problem mit equals Java Basics - Anfänger-Themen 5
K Equals,Instanceof und "==" Java Basics - Anfänger-Themen 7
C warum liefert equals kein TRUE Java Basics - Anfänger-Themen 12
E Java hashCode equals Problem Java Basics - Anfänger-Themen 2
H Equals hascode Java Basics - Anfänger-Themen 5
S Equals Downcast? Java Basics - Anfänger-Themen 11
D equals Vergleiche Java Basics - Anfänger-Themen 7
L String mit equals vergleichen Java Basics - Anfänger-Themen 6
neurox Tutorial equals und hashCode überschreiben Java Basics - Anfänger-Themen 33
F String equals null wird nicht angenommen. Java Basics - Anfänger-Themen 24
A Reihenfolge bei equals() Java Basics - Anfänger-Themen 2
P Toleranz bei equals Java Basics - Anfänger-Themen 4
B Frage zu equals() und hashCode() Java Basics - Anfänger-Themen 28
A veränderbar kanonische Klassen: Methode equals, hashcode, serializable Java Basics - Anfänger-Themen 5
D String#equals + String#charAt Java Basics - Anfänger-Themen 5
S equals() - hashCode() - Contract Java Basics - Anfänger-Themen 54
G mehrere Werte für .equals ? Java Basics - Anfänger-Themen 22
T [SOLVED] Java String equals funktioniert nicht Java Basics - Anfänger-Themen 5
C 2 Objekte (mathematisch) vergleichen in der equals Methode Java Basics - Anfänger-Themen 10
B String.equals(Object) anstatt "=" Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben