Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Dir Oberklasse von equals() und hashCode() ist die Klasse Object. Sprich die Oberste Klasse in der Hierarchie.
Equals wird nur bei Objekten angewendet, da bei Objekten die Referenzen unterschiedlich ist, wird
auf die Gleicheit geprüft.
Die Methode equals sieht so aus:
public boolean equals(Object obj)
Equals liefert einen Booleschen Wert zurück, das heisst wenn 2 Objekte übereinstimmen, dann liefert Equals ein TRUE
stimmmen die Objekte nicht überein, dann ist dieses Automatisch FALSE.
Dann gabs noch folgenden Satz:
Dieses Objekt der Klasse Object ist immer das Objekt, mit dem das Objekt, von welchem die equals-Methode aus aufgerufen wurde, verglichen werden soll.
Ich glaub das bezog sich hierrauf:
Bottle b = (Bottle)obj;
Übrigens diesen Satz versteh ich ab, sobald dies funktioniert ... , nicht.
Wenn Sie also zwei Objekte vergleichen möchten, müssen Sie immer equals verwenden.
Dies funktioniert tadellos für Objekte von Klassen, die diese Methode überschrieben haben – was Ihre eigene Klasse von Natur aus nicht tut.
Und zu dem Quellcode versteh ich nicht wieso eigentlich bei beiden FALSE zurück gegeben wird.
Obwohl beide Objekte den selben Inhalt haben. Und dieses Downcast dann was bringt mir ein Downcast, wenn in meiner Klasse
die inhalte eigentlich stimmen...
also ich find das echt ein bissien komisch und kompliziert. Vielleicht liegts daran das ich das nicht nach voll ziehen kann.
aber für mich sehen die Objekte gleich aus. beide haben als inhalt 1.0F
Java:
public class Bottle {
private float capacity = 0;
private String content = null;
public void setCapacity(float capacity) {
this.capacity = capacity;
}
public void setContent(String content) {
this.content = content;
}
public float getCapacity() {
return this.capacity;
}
public String getContent() {
return this.content;
}
public boolean equals(Object obj) {
Bottle b = (Bottle)obj;
// Primitiver Vergleich Objekt vergleich ->String content von this mit objekt Downcast
if (this.capacity == b.getCapacity() && this.content.equals(b.getContent())) {
System.out.println("true");
return true;
}
System.out.println("false");
return false;
}
public static void main(String[] args) {
Bottle b1 = new Bottle();
Bottle b2 = new Bottle();
Bottle b3 = new Bottle();
// Die Paremter der Methoden werden befüllt.
b1.setContent("Wasser");
b2.setContent("Wasser");
b3.setContent("Cola");
//----------------------------- für die If abfrage gelten diese 3 Objekte:
// aber woher weis ich das nicht b1 von setContent mit b1 von setCapacity verglichen wird?
b1.setCapacity(1.0F);
b2.setCapacity(1.0F);
b3.setCapacity(0.5F);
if (b1.equals(b2)) {
System.out.println("Flasche1 hat den selben Inhalt wie Flasche2");
}
else {
System.out.println("Flasche1 hat NICHT den selben Inhalt wie Flasche2");
}
if (b2.equals(b3)) {
System.out.println("Flasche2 hat den selben Inhalt wie Flasche3");
}
else {
System.out.println("Flasche2 hat NICHT den selben Inhalt wie Flasche3");
}
}
}
Bei deinem Code gelten die Zwei Flaschen als Gleich , aber im Java Blogbuch war zu dem Zeitpunkt wo steht, dass sie nicht gleich sind die equals- Methode noch nicht überschreiben.
ich weis das der bei mir im Code die flaschen gleich sind. Könnte jemand genau auf meine Fragestellung eingehen wieso vor dem downcast die nicht gleich sind und nach dem downcast gleich sind.
das versteh ich nicht. Hab mir den Link total durchgelesen aber ich checks nicht, da auch nicht wirklich erklärt wird wieso das so ist. Sondern es wird nur erwähnt, das es nicht funktioniert und man ein downcast machen muss das es funktioniert.
Magst du deine erste Antwort noch ein bisschen leserlicher verfassen? Da kann man nämlich nicht unterscheiden, was jetzt von dir kommt, und was aus dem java-blog-buch kopiert wurde. So fällt es nur sehr schwer nachzuvollziehen, wo jetzt dein eigentliches Problem ist. Du kannst btw deine Fragen auch gerne als Kommentar direkt im Java Blog Buch stellen.