wann weiß ich, ob die Methode toString() zu implementieren ist?
oft genügt auch nur:
System.out.println(...)-> sie ruft ja automatisch toString() auf oder?
hihi - wenn du dir den Code von String.valueOf(d) anschaust erklärt das die Frage:
Code:
return Double.toString(d);
zur zweiten Frage: println ruft immer die toString methode des Objekts auf. bei eigenen Objekten sollte man immer die toString überschreiben, um nicht im Wust des hashCode sich zu verlieren
public class Irgendwas
{
public static void main (final String[] args)
{
System.out.println (new KlasseA("test"));
System.out.println (new KlasseB("test"));
}
}
class KlasseA
{
private String s;
public KlasseA (String str)
{
s = str;
}
}
class KlasseB
{
private String s;
public KlasseB (String str)
{
s = str;
}
public String toString()
{
return "KlasseB: " + s;
}
}
das ist die default toString ausgabe der Klasse Object - da jedes Objekt in Java automatisch von dieser Klasse erbt nutzt jede Klasse die toString Methode von Object (wenn die Methode nicht in der Klasse überschrieben wird)...
die Ausgabe ist der Klassennamen und der Hashcode des Objekts....
das ist die default toString ausgabe der Klasse Object - da jedes Objekt in Java automatisch von dieser Klasse erbt nutzt jede Klasse die toString Methode von Object (wenn die Methode nicht in der Klasse überschrieben wird)...
die Ausgabe ist der Klassennamen und der Hashcode des Objekts....
http://www.galileocomputing.de/openbook/javainsel2/java_060008.htm hat gesagt.:
Die Methode hashCode() soll zu jedem Objekt eine möglichst eindeutige Integerzahl (sowohl positiv als auch negativ) liefern, die das Objekt identifiziert. Inhaltlich gleiche Objekte (gemäß der Methode equals()) müssen denselben Wert bekommen. Eine spezielle Funktion berechnet diesen Wert, der Hashcode oder Hash-Wert genannt wird. Die Funktionen, die solche Werte berechnen, nennen sich Hash-Funktionen.
Hashcodes werden verwendet, um Elemente in Hash-Tabellen zu speichern. Diese sind Datenstrukturen, die einen effizienten Zugriff auf ihre Elemente erlauben. Die Klassen java.util.HashMap oder java.util.Hashtable bieten eine solche Datenstruktur an.
Fehlt der Hinweis, dass der hashCode im Allgemeinen NICHT eindeutig ist bzw. sein kann (z.B. weil es viel weniger ints gibt als mögliche Strings
Er dient im Collections API dazu, die Elemente in sog Buckets vorzusortieren, damit später der Zugriff schneller ist
er soll - da die Eindeutigkeit praktisch nie zu erreichen ist - eine möglichst "gute" Verteilung der Objekte in die Buckets erlauben
ein besseres Zitat wäre da wohl in der API zu finden
# Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application.
# If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result.
# It is not required that if two objects are unequal according to the equals(java.lang.Object) method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hashtables.