Jaqueson Geschrieben 19. Oktober 2006 Geschrieben 19. Oktober 2006 Hi, ich habe 2 Klassen. Eine Oberklasse Fahrzeug package fuhrpark; public class Fahrzeug { String hersteller, modell, kennzeichen; Double gewicht; public Fahrzeug() { super(); // TODO Auto-generated constructor stub } public Fahrzeug(String hersteller, String modell, String kennzeichen, Double gewicht) { super(); this.hersteller = hersteller; this.modell = modell; this.kennzeichen = kennzeichen; this.gewicht = gewicht; } @Override public boolean equals(Object arg0) { // TODO Auto-generated method stub return super.equals(arg0); } @Override public String toString() { // TODO Auto-generated method stub return super.toString(); } } und Lkw: package fuhrpark; public class Lkw extends Fahrzeug { Integer nutzlast; private int wert; public Lkw() { super(); // TODO Auto-generated constructor stub } public Lkw(Integer nutzlast) { super(); this.nutzlast = nutzlast; } @Override public boolean equals(Object arg0) { // TODO Auto-generated method stub //return super.equals(arg0); if(this == arg0) { return true;//in den Unterlagen steht glaube ich false } if(arg0 instanceof Lkw == false) { return false; } final Lkw l = (Lkw) arg0; if(this.hersteller == l.getHersteller() && this.kennzeichen == l.getKennzeichen() && this.modell == l.getModell()) { return true; } return false; } @Override public String toString() { // TODO Auto-generated method stub //return super.toString(); wert = this.nutzlast; return "" + wert; } } Wenn ich jetzt im Hauptprogramm zwei identische Lkw's anlege: Lkw fzg1 = new Lkw("Scania", "Altamov", "HN-KV 256", 7.5, 3); Lkw fzg3 = new Lkw("Scania", "Altamov", "HN-KV 256", 7.5, 3); und diese dann vergleichen will if(fzg1.equals(fzg3)) { System.out.println("fzg1 und fzg3 sind gleich"); } else { System.out.println("fzg1 und fzg3 sind nicht gleich"); } kommt, sobald ich den integer Wert (nutzlast) mit in die && Verknüfungen der equals Methode nehme, dass es nicht gleich ist. Wenn ich den integer Wert rausnehme, sagt er mir, dass sie gleich sind. Woran kann das liegen? Ist meine toString() Methode überhaupt richtig? Danke und Gruß sommerfetz
Jaraz Geschrieben 19. Oktober 2006 Geschrieben 19. Oktober 2006 if(this.hersteller == l.getHersteller() && this.kennzeichen == l.getKennzeichen() && this.modell == l.getModell()) Du musst da auch mit equals arbeiten, da es verschiedene Integer Objekte sind und du mit == auf die gleiche Referenz vergleichst und nicht auf den gleichen Inhalt. Gruß Jaraz
Jaqueson Geschrieben 19. Oktober 2006 Autor Geschrieben 19. Oktober 2006 Ok, kann ich das auch irgendwie machen, das ich das mit toString() mache? Also den int in einen String umwandle?
geloescht_Newlukai Geschrieben 19. Oktober 2006 Geschrieben 19. Oktober 2006 kann ich das auch irgendwie machen, das ich das mit toString() mache? Also den int in einen String umwandle? Klar, aber warum willst Du das tun? nutzlast.equals(arg0.getNutzlast()) tut genau das, was Du willst. Außerdem hätt' ich da noch ein, zwei Anmerkungen: if(arg0 instanceof Lkw == false) { return false; } kann man eleganter schreiben: if(!arg0 instanceof Lkw) { return false; } Und das hier: public String toString() { // TODO Auto-generated method stub //return super.toString(); wert = this.nutzlast; return "" + wert; } geht auch kürzer: public String toString() { return nutzlast.toString(); } Zumal ich mich frage, warum Du dem Attribut wert in der toString()-Methode die nutzlast zuweist.
Jaqueson Geschrieben 19. Oktober 2006 Autor Geschrieben 19. Oktober 2006 Danke für die Tipps. Habe mir gedacht, dass das mit dem Integer damit zu tun hat, dass er Integer es einfach nicht vergleichen kann. Habe gedacht, dass ich es dann in nen String umwandle um es zu vergleichen (hat aber auch nicht funktioniert)...
geloescht_Newlukai Geschrieben 20. Oktober 2006 Geschrieben 20. Oktober 2006 Habe mir gedacht, dass das mit dem Integer damit zu tun hat, dass er Integer es einfach nicht vergleichen kann. Das eigentlich Problem bei der Geschichte war, daß Du nicht wußtest was der Unterschied zwischen int und Integer ist. int ist ein primitiver Datentyp und kann mit == verglichen werden. Integer ist ein Objekt, daß einen int-Wert kapselt und kann mit equals() verglichen werden. Der Vergleich zweier Integer-Objekte mit == sagt Dir nur ob es sich um dasselbe Objekt handelt, nicht, ob der gleiche Wert enthalten. ist. Aber zu dem Thema empfehle ich Dir die Lektüre eines der Bücher, die im Sticky-Thread gesammelt sind.
baba007 Geschrieben 20. Oktober 2006 Geschrieben 20. Oktober 2006 Integer ist eine Wrapperklasse (klick mich)
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden