[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[Debian]:Re: int to String Convertierung



Florian Leeber schrieb in Nachricht <3884D449.7DAC4D2D@ghl.at>...
>
>
>"C.Ullenboom" schrieb:
>>
>>
>> Hallo,
>>
>> String Ausgabe;
>> int Secunde = 5;
>> Ausgabe = ""+5;
>
>Bäh, ist ja eklig, warst Du mal C-Programmierer?


ÄÄh, die Hälfte meines Programmierlebens habe ich schmutzig Assembler, sonst
C und Java programmiert.

Wer sich noch mal für alle (?) Umwandlungsmöglichkeiten mit Laufzeit
interessiert:

----%< Schnipp ---------------------------
Geschwindigkeitsbetrachtungen von Integer in String
Auch die Umwandlung einer Gannzahl in eine Zeichenkette kann bei einem
geschwindigkeitsoptimiertem Programm beachtet werden. Es gibt aber noch
weitere interessante Beobachtungen, denn um eine Ganzzahl in eine
Zeichenkette zu konvertieren bieten sich unterschiedliche Möglichkeiten an:

1: s = String.valueOf( int )
2: s = "" + int
3: s = new StringBuffer( "" ).append( int ).toString()
4: s = new StringBuffer().append( int ).toString()
5: s = Integer.toString( int )
6: s = Integer.toString( int, 10 )

Die letzten beiden Varianten sind etwas langsamer als die übrigen und
zwischen den ersten beiden lässt sich kein Geschwindigkeitsunterschied
ausmachen, denn Fall 2 wird vom Sun-Compiler in 1 umgewandelt.
Glücklicherweise entsteht keine Codezeile, wie wir sie unter 3 sehen. 4 ist
noch etwas optimaler als 3, da bei 3 der StringBuffer mit leerem String
erzeugt wird und sich der interne Puffer sofort mittels append("") erhöht.
Die interne Puffergröße ist aber wie bei Fall 4 auf 16 Zeichen gesetzt, so
dass erst bei wirklich großen Zahlen der interne Puffer wieder verworfen
werden muss. Wir haben schon gesagt, dass der Compiler die Variante 2 zu
String.valueOf(int) optimiert, also eine interne Umwandlung, so wie sie in
Zeile 1 steht, vornimmt. Doch genau diese Anweisung ruft
Integer.toString(int,10) auf. Nun erkennt aber Integer.toString(int,10) die
Basis 10 und verzweigt zu der speziellen Methode in der Wrapper Klasse
Integer.toSting(int), die auch öffentlich ist. Dies ist wieder so ein
Bibliothekengeheimnis, warum bei String.valueOf(int) nicht direkt die
spezielle Methode verwendet wurde, zumal dort der Basis-Test wegfallen würde
(ist die Basis kleiner Character.MIN_RADIX oder die Basis größe als
Character.MAX_RADIX würde automatisch 10 angenommen). So bleibt
festzuhalten, dass Integer.toString(int) die schnellste der vorgestellten
Möglichkeit darstellt.


Ulli

--
/**
 @author Christian Ullenboom
 @email C.Ullenboom@java-tutor.com
 @url http://java-tutor.com
 @tipp Java lernen? Buch lesen: "Java ist auch eine Insel". Auf der
WebSeite,
*/


------------------------------------------------
Um sich aus der Liste auszutragen schicken Sie
bitte eine E-Mail an majordomo@jfl.de die im Body
"unsubscribe debian-user-de <deine emailadresse>"
enthaelt.
Bei Problemen bitte eine Mail an: Jan.Otto@jfl.de
------------------------------------------------
Anzahl der eingetragenen Mitglieder:     761


Reply to: