gleichheit von objekten

Status
Nicht offen für weitere Antworten.

Cube

Mitglied
hallo zusammen ich habe ein kleines problem mit objekten und zwar habe ich ein programm das zwei objekte auf gleichheit prüfen soll dies soll mit equals () gehen bei mir geht das leider nicht kann mir einer sagen was ich falsch mache
Java:
public class ObjektErstellen {


	public static void main(String[] args) {
		
		//Definition der Referenzvariablen
		Car car1 ,car2;
		
		//erzeugen des refernztyps/objekt
		car1= new Car("ford",150);
		
		car2=new Car("ford",150);
		
		//gleichheit prüfung
		boolean gleich = car1==car2;
		
		boolean gleich2=car1.equals(car2);
		
		System.out.println("prüfung auf referenzgleichheit: "+gleich);
		System.out.println("prüfung auf referentypen/objekt gleichheit: "+gleich2);
		
	}

}

Java:
class Car {
	int ps;
	double verbrauch;
	String marke;
	
	Car(String marke,int ps)
	{
		marke=marke;
		ps=ps;
		
	}
}

es kommt immer false raus aber warum?
 
Zuletzt bearbeitet:
B

bygones

Gast
du musst in deiner Klasse schon die Methode equals ueberschreiben - ansonsten wird die equals von Object genommen und die verlgeicht auf referenz
 

faetzminator

Gesperrter Benutzer
etwa so sollte equals aussehen (in Car)

Java:
public boolean equals(Object o) {
    if (!(o instanceof Car)) {
        return false;
    }
    Car car = (Car) o;
    return car.marke.equals(this.marke) && car.ps == this.ps; // was du auch immer übrprüfen willst...
}
 

Cube

Mitglied
ich habe jetzt die equals() methode in meiner Car klasse überschrieben
und die methode im hauptprogramm aufgerufen nun bekomme ich aber wären der laufzeit einen fehler :Exception in thread "main" java.lang.NullPointerException
at Car.equals(Car.java:17)
at ObjektErstellen.main(ObjektErstellen.java:20)
Java:
	public boolean equals(Car b)
	{  
		//vergleich von marke und ps
		
		if (this.ps == b.ps && this.marke.equals(b.marke)) 
		{  
	     return true;  
		}
		
		else
		{
		 return false; 
		}
	}
 
B

bygones

Gast
dann schau in Zeile 17 in der Car.java - da is was null....

also entweder ist b selber null oder eine marke ist null...
 

faetzminator

Gesperrter Benutzer
falls gewisse Werte bei dir wirklich null sein sollen, kannst du dir eine Helpermethode schreiben
Java:
private boolean equals(Object o1, Object o2) {
    if (o1 == null && o2 == null) {
        return true;
    }
    if (o1 == null || o2 == null) {
        return false;
    }
    return o1.equals(o2);
}
das könntest du in diesem Fall mit folgender Zeile aufrufen
Java:
equals(this.marke, b.marke)
Du solltest aber eigentlich equals(Object) und nicht equals(Car) schreiben...
 

Cube

Mitglied
Java:
public boolean equals(Object b)
	{  
		//vergleich von marke und ps
		Car a=(Car) b;
		if (this.ps == a.ps && this.marke.equals(a.marke)) 
		{  
	     return true;  
		}
		
		else
		{
		 return false; 
		}
	}
immer noch der selbe fehler

und warum macht man das

equals(Object b)

Car a=(Car) b;
 

faetzminator

Gesperrter Benutzer
Die Methode, welche von Object definiert wird, ist nunmal equals(Object).
Zusätzlich solltest du, wie in meinem ersten Code eine instanceof Überprüfung machen.
Und den ersten Teil meines letzteren Mails solltest du ebenfalls beachten (equals(Object, Object) gegen nullpointers)
Also etwa so:
Java:
public boolean equals(Object o) {
    if (!(o instanceof Car)) {
        return false;
    }
    Car car = (Car) o;
    return car.ps == this.ps && equals(car.marke, this.marke); // was du auch immer übrprüfen willst...
}

private boolean equals(Object o1, Object o2) {
    if (o1 == null && o2 == null) {
        return true;
    }
    if (o1 == null || o2 == null) {
        return false;
    }
    return o1.equals(o2);
}
 

Cube

Mitglied
ich komm grad gar nicht mehr klar
ich weis das man die equals methode überschreiben muss weil die ja nur sont die referenz gleichheit prüft
ich habe nochmal 2 einfacheres programm geschrieben
Java:
class Car {
	
	String marke;
	
	Car(String marke)
	{
		marke=marke;	
	}
	
	boolean equals(Car car2)
	{
		if(this.marke.equals(car2.marke))
		{
			return true;
		}
		else
		{
			return false;
		}
		
	} 
}

Java:
class Car2 {

	int ps;
	
	Car2(int ps)
	{
		this.ps=ps;	
	}
	
	boolean equals(Car2 car2)
	{
		if(car2.ps==this.ps)
		{
			return true;
		}
		else
		{
			return false;
		}
		
	} 
}

car2 funktioniert Car1 nicht wirder kommt ein laufzeitfehler NullPointerException
???:L
 
B

bygones

Gast
Java:
boolean equals(Car car2)
les erstmal was man dir antwortet....
du musst
Java:
public boolean equals(Object car2)
ueberschreiben !

dein 1. bsp geht nicht, da marke im equals null ist, da du es nie setzt.
dein konstruktor ueberschreibt den parameter, setzt nicht die instanzvariable
Java:
this.marke = marke
 

sayang

Aktives Mitglied
Du hast im Konstruktor von Car folgenden Fehler:

Java:
Car(String marke)
{
    marke=marke;    
}

Du musst hier daran denken, dass mit "marke" erstmal die dem Konstruktor übergebene Variable meint. Du weist hier den Wert der Variable "marke" sich selbst zu. Und nicht dem Attribut "marke" von Car.
Kurz: da fehlt ein "this." :)

Java:
Car(String marke)
{
    this.marke=marke;    
}

Edith sagt, da war jemand schneller als ich ;)
 

Cube

Mitglied
jetzt hab ich's
hab ja gelesen aber als neuling ist das nicht alles immer grade leicht zu verstehen

this ist also eine art platzhalter für das jeweilige objekt das bei mir fehlte

Java:
public boolean equals(Object car2)
es geht aber doch auch so wie ich das mache warum soll ich denn da casten?
 
B

bygones

Gast
es geht aber doch auch so wie ich das mache warum soll ich denn da casten?
Java:
public class Example {
    private final String _name;

    public Example(String name) {
        _name = name;
    }

    boolean equals(Example other) {
        return other._name.equals(other);
    }

    public static void main(String[] args) {
        Example ex1 = new Example("example1");
        Example ex2 = new Example("example2");

        System.out.println(ex1.equals(ex2)); // false
    }
}
so wie du es geschrieben hast - hier nochmals - klappt es nicht, da du nicht equals ueberschreibst !

um eine methode zu ueberschreiben musst du die selbe signatur benutzen wie die obermethode und die ist nun mal
Java:
boolean equals(Object o)
 

Cube

Mitglied
ja hast recht
du überschreibst die methode ich schreibe eine eigne(also nicht überschrieben) so könnte man das sehen
 

sayang

Aktives Mitglied
this ist also eine art platzhalter für das jeweilige objekt das bei mir fehlte
Nur zur Info: Du brauchst kein this zu schreiben, wenn der Name des Parameters von dem Namen der Objektvariablen abweicht.

Java:
public class Car {
   private String marke;

   public Car(String eineMarke) {
      marke = eineMarke; // Hier weiss das Programm, was "marke" ist. Daher kein this notwendig
   }
}

;)
 
B

bygones

Gast
ja hast recht
du überschreibst die methode ich schreibe eine eigne(also nicht überschrieben) so könnte man das sehen
als tipp - wenn du eine methode ueberschreiben willst schreibe immer @Override darueber
zb
Java:
@Override
public boolean equals(Object o)
dann meckert der compiler schon wenn du die methoden nicht richtig definierst
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Gleichheit überprüfen Java Basics - Anfänger-Themen 8
T Diagonale von 2DArray auf gleichheit überprüfen Java Basics - Anfänger-Themen 2
G Strings auf Gleichheit prüfen - Aufgabe vom Prof. Java Basics - Anfänger-Themen 5
C Klassen Reguläre Ausdrücke auf Gleichheit prüfen Java Basics - Anfänger-Themen 5
M String auf Gleichheit mit Arraystrings vergleichen Java Basics - Anfänger-Themen 4
G Elemente von Feld und Liste auf Gleichheit überprüfen Java Basics - Anfänger-Themen 13
K Gleichheit und Identität von Strings Java Basics - Anfänger-Themen 2
X Objekte auf gleichheit prüfen Java Basics - Anfänger-Themen 5
R Collections Text-Dateien auf Gleichheit überprüfen Java Basics - Anfänger-Themen 22
S Objektidentität und gleichheit an diesem Beispiel Java Basics - Anfänger-Themen 7
C Dateiinhalt zweier Dateien auf Gleichheit prüfen Java Basics - Anfänger-Themen 3
A Elemente 2er int[] auf Gleichheit und Position überprüfen Java Basics - Anfänger-Themen 7
H Dates "Tage" auf gleichheit prüfen? Java Basics - Anfänger-Themen 4
G identität vs gleichheit Java Basics - Anfänger-Themen 11
C Objekte auf gleichheit vergleichen Java Basics - Anfänger-Themen 3
M wertmäßige gleichheit Java Basics - Anfänger-Themen 15
C String soll auf gleichheit (=teilweise) überprüft Java Basics - Anfänger-Themen 5
H strings auf gleichheit / ungleichheit prüfen wer kann helfen Java Basics - Anfänger-Themen 4
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
T Kollision von 2 Objekten Java Basics - Anfänger-Themen 2
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
B Reflection ändern von Objekten in Objekten Java Basics - Anfänger-Themen 12
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
T Permanentes speichern von Objekten in einer ArrayList Java Basics - Anfänger-Themen 6
N Vererbung Queue bestehend aus Superclass- und Subclass-Objekten Java Basics - Anfänger-Themen 7
B Compiler-Fehler Array aus Objekten übergeben Java Basics - Anfänger-Themen 7
YAZZ Schlüsselworte Töten von Objekten Gameover Java Basics - Anfänger-Themen 2
F Abstand zwischen zwei Objekten berechnen wie? Java Basics - Anfänger-Themen 1
districon Vergleichen von Objekten Java Basics - Anfänger-Themen 20
Zeppi OOP Array in Objekten Java Basics - Anfänger-Themen 4
LetsSebi Methode, die einen arry von objekten speichert in einer datei Java Basics - Anfänger-Themen 6
JavaNoobi Try and Catch und übergabe von Objekten Java Basics - Anfänger-Themen 2
A Klasse Menge mit Objekten der Klasse Person Java Basics - Anfänger-Themen 8
S Auf Array aus Objekten zugreifen? Java Basics - Anfänger-Themen 1
D Mit Objekten rechnen, Textfield, JavaFX, Noob Java Basics - Anfänger-Themen 8
N enum Attribut von Objekten einer Hashmap ausgeben Java Basics - Anfänger-Themen 6
A Auf Eigenschaften von Objekten anderer Klassen zugreifen Java Basics - Anfänger-Themen 5
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
N Klassen Rekursion mit Feldern von Objekten Java Basics - Anfänger-Themen 14
D Operatoren Mit Objekten rechnen Java Basics - Anfänger-Themen 7
E Datentypen Einfügen von Objekten in eine Map Java Basics - Anfänger-Themen 2
S Pane nach speziellen Child Objekten durchsuchen Java Basics - Anfänger-Themen 3
B ID von unterschiedlichen Objekten bekommen? Java Basics - Anfänger-Themen 2
T Daten von Objekten speichern Java Basics - Anfänger-Themen 7
PaperHat Programmieraufgabe - Objekte in Objekten Java Basics - Anfänger-Themen 2
L Rechnen mit Objekten Java Basics - Anfänger-Themen 3
S werte von objekten in schleife verändern Java Basics - Anfänger-Themen 14
D Zusammenarbeit von Objekten Java Basics - Anfänger-Themen 1
Y Begrenzte Anzahl an Objekten? Java Basics - Anfänger-Themen 12
Kornblume Nulltyp eines Arrays von Objekten? Java Basics - Anfänger-Themen 10
A Frage zur Aufgabe Uhrzeit einstellen mit Objekten Java Basics - Anfänger-Themen 18
M Generische Liste aus Comparable-Objekten Java Basics - Anfänger-Themen 6
G Klassen Call by Value auch bei Objekten? Java Basics - Anfänger-Themen 2
R Verständnisfrage zu Objekten u. Übergabeparameter Java Basics - Anfänger-Themen 8
arjoopy Kapselung Übergabe von Objekten aus ArrayList Java Basics - Anfänger-Themen 4
schoenosrockos Unterschied zwischen Objekten und vererbungen Java Basics - Anfänger-Themen 1
M Speichern von Objekten - Verfügbarkeit bei erneutem Aufruf Java Basics - Anfänger-Themen 3
R Methoden Methode ruft Methode auf, ruft Methode auf (mit Objekten) Java Basics - Anfänger-Themen 4
S Serialisierung: Laden von Objekten - Risiken? Java Basics - Anfänger-Themen 4
Shizmo PriorityQueue mit Objekten Java Basics - Anfänger-Themen 10
E Instanzieren von Objekten verkürzen Java Basics - Anfänger-Themen 1
F Interaktion von Objekten verschiedener Klassen... Java Basics - Anfänger-Themen 13
D Effiziente Verwaltung der Objekten und Unterobjekten Java Basics - Anfänger-Themen 18
N Dauer zwischen zwei LocalDateTime Objekten berechnen? Java Basics - Anfänger-Themen 4
L Subklasse von ArrayList nur mit bestimmten Objekten füllen Java Basics - Anfänger-Themen 1
E Erste Schritte Gute Erklärung zu Objekten / Klassen / Methoden / Sichtbarkeiten auf Deutsch Java Basics - Anfänger-Themen 3
S Problem mit augabe von Objekten Java Basics - Anfänger-Themen 3
T Junit Mockito: Instanz von inneren erzeugten Objekten Java Basics - Anfänger-Themen 4
P Zugriff auf Felder in ArrayList Objekten Java Basics - Anfänger-Themen 2
W Was passiert mit Objekten die nicht in Objektvariablen initialisiert werden ? Java Basics - Anfänger-Themen 3
D Zugriff auf von einer anderen Klasse erstellten Objekten Java Basics - Anfänger-Themen 5
S Liste mit Objekten und Listen Java Basics - Anfänger-Themen 9
Y Gleiche Arrays aus einem Array mit Objekten Java Basics - Anfänger-Themen 5
K Min eines Arrays mit Objekten Java Basics - Anfänger-Themen 6
M Array mit Objekten lässt sich nicht auslesen Java Basics - Anfänger-Themen 10
T Statische Arrays von Objekten Java Basics - Anfänger-Themen 2
J Methoden Einfügen von Objekten nach Alphabet in ArrayList funktioniert nicht Java Basics - Anfänger-Themen 2
B Erste Schritte Anzeige von Graphics Objekten einzeln aktualisieren Java Basics - Anfänger-Themen 1
TheSorm Koordinaten von gedrehten Objekten Java Basics - Anfänger-Themen 4
D Bestimmte Werte von Objekten aus einer ArrayList in eine andere ArrayList kopieren Java Basics - Anfänger-Themen 14
B Aliasing bei null-Objekten Java Basics - Anfänger-Themen 3
O Java Erzeugung von neuen Objekten Java Basics - Anfänger-Themen 1
J Verständnisfragen zu dem Thema Objekten Java Basics - Anfänger-Themen 7
J Array von Objekten, wie schauts im Heap / Stack aus ? Java Basics - Anfänger-Themen 7
O Größe von Objekten Java Basics - Anfänger-Themen 5
Y Variable Menge von Objekten erzeugen und mit ihren Attributen rechnen Java Basics - Anfänger-Themen 7
kaoZ Best Practice Verständnisfrage Listener bei lokalen Objekten Java Basics - Anfänger-Themen 8
F Umgang mit referenzierten Objekten bei ArrayList Java Basics - Anfänger-Themen 1
M Löschen von Objekten während Iteration über Liste Java Basics - Anfänger-Themen 9
E Array von Objekten einer selbst definierten Klasse mit eindeutigem Namen Java Basics - Anfänger-Themen 2
C For schleife mit Array und Objekten Java Basics - Anfänger-Themen 17
kaoZ Input/Output Android : Deserialisieren von mehreren Objekten in einer Datei Java Basics - Anfänger-Themen 0
U Übergabe von Objekten Java Basics - Anfänger-Themen 0
C Werte aus zwei Objekten miteinander vergleichen Java Basics - Anfänger-Themen 3
Joew0815 Interface JSON Objekte aus Java Objekten erzeugen Java Basics - Anfänger-Themen 9
D Sortieren von int Werten von Objekten in einer LinkedList, kann nicht auf int Werte zugreifen Java Basics - Anfänger-Themen 3
E Erste Schritte Sortieren von Objekten in doppelt-verlinkter Liste Java Basics - Anfänger-Themen 9
R addition von 2 Array Objekten Java Basics - Anfänger-Themen 5
V Grundlegendes Zu Objekten/Klassen Java Basics - Anfänger-Themen 10
S Problem bei Kollision zwischen Array-objekten! Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben