aus der Buchklasse:
public String toString()
{
return ("" + autor + ": " + titel + " ("
+ this.dateToString(this.getErscheinungsdatum()) + ", ISBN "
+ iSBN + ")");
}
public boolean equals(Object o)
{
return (this.toString() == o.toString());
}
warum kommt dann wenn ich buch1 mit den gleichen werten wie buch2 fütter, das buch1.equals(buch2) false liefert?
Weil du equals ein Object o übergibst, so dass der Aufruf o.toString nicht deine toString Klasse aufruft, sondern die der Klasse Object…
Probier mal so:
public boolean equals(Object o)
{
Buch vergleich;
vergleich = (Buch) o;
return (this.toString() == vergleich.toString());
}
Weil == Referenzen vergleicht.
Also:
Bei Buch a = new Buch();
Buch b = a;
liefert Dein equals true, da a und b auf "das selbe Objekt im Speicher" verweisen.
Aber
Buch a = new Buch();
Buch b = new Buch();
haben verschiedene Referenzen.
{
Buch oo = (Buch)o;
return oo.getTitel().equals(this.getTitel() && oo.getAutor().equals(this.getAutor()) && …
aber die haben die gleiche string representation und ich vergleiche hier strings
Weil == Referenzen vergleicht.
Also:
Bei Buch a = new Buch();
Buch b = a;
liefert Dein equals true, da a und b auf "das selbe Objekt im Speicher" verweisen.
Aber
Buch a = new Buch();
Buch b = new Buch();
haben verschiedene Referenzen.
{
Buch oo = (Buch)o;
return oo.getTitel().equals(this.getTitel() && oo.getAutor().equals(this.getAutor()) && …
Stimmt, das kommt auch noch dazu, das sollte man dann aber auch mit einem equals der toString Funktion erledigen können, denke ich:
public boolean equals(Object o)
{
Buch vergleich;
vergleich = (Buch) o;
return (this.toString().equals(vergleich.toString()));
}
aber die haben die gleiche string representation und ich vergleiche hier strings
Ja, aber Strings vergleicht man mit equals und nciht mit == in Java!
public boolean equals(Object o)
{
Buch vergleich;
vergleich = (Buch) o;
return (this.toString().equals(vergleich.toString()));
}
kommt aber auch nicht false bei raus…
public boolean equals(Object o)
{
Buch vergleich;
vergleich = (Buch) o;
return (this.toString().equals(vergleich.toString()));
}
kommt aber auch nicht false bei raus…
Ich dachte du wolltest auch 2 gleiche Objekte vergleichen, dann soll doch nicht false rauskommen?
aber die haben die gleiche string representation und ich vergleiche hier strings
Ja, aber Strings vergleicht man mit equals und nciht mit == in Java!
Noch als Anmerkung/Unterstreichung
== vergleicht bei allen Objekten (String ist auch ein Objekt) "nur" die Referenzen. Will man also Wissen, ob zwei Objekte "sachlich" gleich sind aber verschiedenen "Geburtsort" haben, sollte man equals nutzen.
toString.equals würde natürlich auch gehen, aber damit koppeltst Du die Gleichheit Deiner Objekte an die toString Repräsentation, was vielleicht nicht immer glücklich ist.
Weil du equals ein Object o übergibst, so dass der Aufruf o.toString nicht deine toString Klasse aufruft, sondern die der Klasse Object…
das stimmt übrigens nicht, es wird immer die Operation der Unterklasse gerufen
public boolean equals(Object o)
{
Buch vergleich;
vergleich = (Buch) o;
//String s1 = this.toString();
//String s2 = vergleich.toString();
String s1 = "Test";
String s2 = "Test";
boolean vergl = (s1.equals(s2));
System.out.println(vergl);
return vergl;
}
Es kommt wegen assertionFailedError zu keinen System output
public boolean equals(Object o)
{
Buch vergleich;
vergleich = (Buch) o;
//String s1 = this.toString();
//String s2 = vergleich.toString();
String s1 = "Test";
String s2 = "Test";
boolean vergl = (s1.equals(s2));
System.out.println(vergl);
return vergl;
}
Es kommt wegen assertionFailedError zu keinen System output
println kann wahrscheinlich nur Strings ausgeben, try:
if (vergl)
{System.out.println("true");}
else
{System.out.println("false");}
autsch ich nehm alles zurück. wenn ich natürlich die falsche klasse teste…
autsch ich nehm alles zurück. wenn ich natürlich die falsche klasse teste…
;)
und welche Version funktioniert jetzt?
println kann man alles übergeben.
assertionError kommt von JUnit.
Sobald JUnit erkennt, daß der Test (assertTrue(…)) nicht true liefert, bricht er ab. Setze Dein println vor das assertTrue (mit dem Testcode) oder bastel Dir ne kleine Main-Klasse zum testen. Das wirst Du das Ergebnis sehen.
string1.equals(string2) geht ich hab nur warteschlange getestet und da muss ich die equals funktion noch für schreiben
println kann wahrscheinlich nur Strings ausgeben
stimmt nicht - println kommt mit Strings und allen Primitiven Datentypen zurecht. Auch mit anderen Objekten funktionierts, aber da wird dann nur das ergebnis von toString() ausgegeben.