Zum Inhalt springen

equals Probleme mit integer


Jaqueson

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...