Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

equals Probleme mit integer

Empfohlene Antworten

Veröffentlicht

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

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

Ok,

kann ich das auch irgendwie machen, das ich das mit toString() mache?

Also den int in einen String umwandle?

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.

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)...

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.

Integer ist eine Wrapperklasse (klick mich)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.