Hallo,
- Sollte man aus Performancegründen in diesem Falle einen StringBuffer (dieser ist im Gegensatz zu String-Objekten mutable) verwenden.
Nein! Wieso? Will er den String ändern? Nein. Wieso sollte er dann
StringBuffer verwenden?
- Sollte auch der direkte Aufruf von toString() funktionieren, da dieser immer einen String zurückgibt und man sich den Cast erspart - im Falle der Klasse String eine Referenz auf das String-Objekt selbst ('return this'):
Nein, man sollte das ganz sicher nicht so tun! Was ist, wenn er
irgendwo einen Programmierfehler hat und nun statt einem String
weißnicht ein Integer-Objekt in den Vector geschrieben hat. Ein
toString() würde für den Integer funktionieren.
Bei einem Cast würde - wie gewünscht - eine ClassCastException geworfen.
Du erkaufst dir mit deinem toString() eine schwer auffindbare
Fehlerquelle!
Übrigens ist die toString()-Version sogar langsamer als die Version
mit dem Cast, wie folgender Code beweist:
Vector v = new Vector();
v.add("Hubbabubba");
String s;
System.out.println(System.currentTimeMillis());
for (int i = 0; i < 1000000000; i++) {
s = (String)v.get(0);
}
System.out.println(System.currentTimeMillis());
for (int i = 0; i < 1000000000; i++) {
s = v.get(0).toString();
}
System.out.println(System.currentTimeMillis());
Die Schleife mit dem Cast benötigt ca. 25 Sekunden. Die Schleife mit
dem toString()-Aufruf dagegen ca. 33 Sekunden. Damit ist deine als
besser propagierte Lösung fehleranfälliger und 33%(!) langsamer!
Gruß
Slyh
Es gibt 10 Arten von Menschen. Solche, die das Binärsystem verstehen, und solche, die es nicht verstehen.