Jaqueson Geschrieben 19. Oktober 2006 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 19. Oktober 2006 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaqueson Geschrieben 19. Oktober 2006 Autor Teilen Geschrieben 19. Oktober 2006 Ok, kann ich das auch irgendwie machen, das ich das mit toString() mache? Also den int in einen String umwandle? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_Newlukai Geschrieben 19. Oktober 2006 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaqueson Geschrieben 19. Oktober 2006 Autor Teilen 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)... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_Newlukai Geschrieben 20. Oktober 2006 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
baba007 Geschrieben 20. Oktober 2006 Teilen Geschrieben 20. Oktober 2006 Integer ist eine Wrapperklasse (klick mich) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.