Objektvergleich mit equals

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
hallo ich habe da mal eine frage zum Vergleich von zwei Objeten mit der equals Methode in JAVA:
folgende equals Methode kann ich mir in Eclipse generieren lassen:

public final boolean equals(final Object o) {
if (this == o)
return true;
if (o == null)
return false;
if (!(o instanceof Vehicle))
return false;
final Vehicle other = (Vehicle) o;
if (carRental == null) {
if (other.carRental != null)
return false;
} else if (!carRental.equals(other.carRental))
return false;
if (Double.doubleToLongBits(payload) != Double.doubleToLongBits(other.payload))
return false;
if (Double.doubleToLongBits(weight) != Double.doubleToLongBits(other.weight))
return false;
return true;

}

oder so was (auch von eclipse generiert):
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null)
return false;
if (!(o instanceof Customer))
return false;
final Customer other = (Customer) o;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}

Nun meine Frage ist das shöner Programmierstil.dass alles mit if Verschachtelungen zu machen,oder sollte man eher einen booleachen Ausdruck zurück geben,so in etwa:

return (other.getWeight() == this.getWeight() && other.getPayload() == this.getPayload() && ((this.getCarRental() != null &&
other.getCarRental() != null && other.getCarRental().equals(this.carRental)) || (this.getCarRental() == null && other.getCarRental() == null)));

das problem bei solchen equals Vergleichen kann das schon sehr unübersichtlich werden.Wie sieht es denn mit dem Performance gewinn aus??

Ich würde die Frage nicht stellen,ich finde ersteres besser (if Verschachtelunegn)..zumindest wenn der booleache Ausdruck sehr lang ist (>=3 vergeliche).Aber vom Dozenten/Übungsabnehmer hört man immer wieder,boolesche ausdrücke zurückgeben,wo möglich? Ist das hier so ein fall,was meint ihr? Oder ist der von Eclipse generierte Code in ordnung.

lieben Gruß
und ich danke euch
 
Ich bin mir jetzt nicht ganz sicher, ob ich die Frage richtig verstanden, aber ich gehe jetzt mal davon aus, dass ich es habe.

equals ist eine Methode. Wenn du dir in eclipse solch einen Code generieren lässt, bedeutet das, dass du dir die Methoden anzeigen lässt. Das was du aber letztlich in deinem Code benutzt, ist lediglich das equals. Was zum Beispiel bei actionPerformed(ActionEvent ae), sprich dem ActionListener für Buttons, ist folgendes

Code:
if(ae.getSource().equals(buttonBeispiel){ 
System.out.println("irgendein Code");
}
 
Riesige If-Verschachtelungen sind grundsätzlich nicht so der Bringer. Aber riesige Boolsche Ausdrücke sind noch viel grausamer. Ich würde auf jeden Fall auch Ifs bevorzugen. In diesem Fall sowieso, denn der Code wird generiert und funktioniert bestens. Kein Grund sich über den Codestil Gedanken zu machen.

@Morgyr: ??? ???:L
 
Was ich meine: Er kann doch einfach .equals(Object) benutzen? Aber ich glaube ich habe die Frage nicht verstanden.
 
payload und weight darfst Du nicht einfach so mit == vergleichen, da es in der Menge der Gleitkommazahlen auch Werte gibt, die nicht gleich mit sich selbst sind. Daher generiert Eclipse "Double.doubleToLongBits(payload) == ...".

Fred
 
Danke euch...
Habs mit if Verschachtelung gemacht.....eclipse generiert ja schon alles,aber man muss sich ja mal über eine schönne Programmierstil Gedanken machen,und warum was so ist,wie es ist.

danke für eure Tips


Gruß
sky
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben