Slyh: einen Vector auslesen

Beitrag lesen

Hallo,

  1. 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?

  1. 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.