public void foo(String bar) { System.out.println(bar); }
int i = 15;
foo(String.valueOf(i));
foo("" + i);
Also ich baue Strings eh nicht mit "+" zusammen.
Zweiteres ist langsamer, weil eine String-Instanz gebaut wird, die keiner benötigt und mehr Methoden aufgerufen werden. Sie bedarf mehr Schreibarbeit und erzeugt längeren (und unübersichtlicheren) Quelltext. Vorteile gibt's keine und inhaltliche Unterschiede auch nicht.Ich nehm eigentlich immer ersteres.. .hab aber jetzt zweiteres in einem ziehmlich guten Buch gesehen... jetzt bin ich verwirrt...
Kannst es natürlich auch wie oben selbst ausprogrammieren. "Warum nicht?" Kann ich Dir natürlich nicht sagen. Bei mir hängt es vom Anwendungsfall ab. Aber mal sehen, was SirWayne schreibt.Mit was dann und warum nicht?
wenn man sich nicht in einer Schleife befindet und die Strings nicht sehr lange sind, kann man das ruhig machen...Also ich baue Strings eh nicht mit "+" zusammen.
Ich denke keiner würde den zweiten Weg gehen, oder?
long t = System.currentTimeMillis();
for(int i = 0; i < 100000000; i++){
String s = String.valueOf(5);
}
System.out.println((System.currentTimeMillis()-t));
t = System.currentTimeMillis();
for(int i = 0; i < 100000000; i++){
String s = 5+"";
}
System.out.println((System.currentTimeMillis()-t));
Also für ein kleines Testprogramm das ich hinterher wegwerfe mach ich das schon auch mal. Sonst aber nicht. Wenn nur den int in einen String umwandeln willst, ist String.valueOf(int) oder Integer.toString(int) angesagt. Das Resultat aus ... [HIGHLIGHT="Java"]"" + i;[/HIGHLIGHT] ... hat einen char-Buffer, der 16 Zeichen (alias 32 bytes) groß, egal wie lang die Zahl selbst ist. Integer.toString(int) berechnet die Länge des Strings, belegt also genau die Menge an Zeichen die benötigt wird und läuft darüber hinaus schneller.ähmn mhnn... tja wie soll ich das jetzt ausdrücken.... ich mach das schon... ich wandle int in Strings um in dem ich "" dran hänge... ich bin aber lernfähig... gibt mir ein Argument und ich lasse es...
...
Code:foo(String.valueOf(i)); foo("" + i);
Ich denke keiner würde den zweiten Weg gehen, oder?![]()
Gratuliere: Dein Compiler hat den gesamten Aufruf wegrationalisiert! Debug mal rein, wenn Du's nicht glaubst.gegen ca 60-70ms fürs +""
Kannst es natürlich auch wie oben selbst ausprogrammieren. "Warum nicht?" Kann ich Dir natürlich nicht sagen. Bei mir hängt es vom Anwendungsfall ab. Aber mal sehen, was SirWayne schreibt.
ähmn mhnn... tja wie soll ich das jetzt ausdrücken.... ich mach das schon... ich wandle int in Strings um in dem ich "" dran hänge... ich bin aber lernfähig... gibt mir ein Argument und ich lasse es...
ich weiß von mikrobenchmarks ist nichts zu halten... aber das spricht doch bände....
class StringSpeedTest
{
public static void main(String args[])
{
long t = System.currentTimeMillis();
int sum = 0;
for(int i = 0; i < 100000000; i++){
String s = String.valueOf(i);
sum += s.length();
}
System.out.println(sum+": "+(System.currentTimeMillis()-t));
t = System.currentTimeMillis();
sum = 0;
for(int i = 0; i < 100000000; i++){
String s = i+"";
sum += s.length();
}
System.out.println(sum+": "+(System.currentTimeMillis()-t));
}
}
Mit was dann und warum nicht?
Ich persönlich glaub' nicht dran...788888890: 8328
788888890: 25483
Aber ich bin sicher, irgendjemand schafft es, "genau das gleiche" zu machen, und andere Ergebnisse zu erhalten ( -> Wer mißt, mißt Mist)
Wo wird denn da kopiert? Integer.toString(int):@Edit: Kann es sein, dass, wenn recht lange Zeichenketten kopiert werden müssen, die "new String()" auch recht lange dauern kann? Nicht bei Integern... also "String.valueOf()"
Ich finde noch immer ... [Highlight=Java]Integer.toString(int)[/Highlight] bei der einfachen Konvertierung am intuitivsten. Die Klasse mit Methode heißt genau so wie ich's auch ausprechen würde; Integer zu String eben.
Ebenius
Erneute überlegungen Integer betreffend stehen schon im voherigem Post. Würd' ja keinen Sinn machen hier zu kopieren. Hab' nur mal wieder mit einem Auge hingeschaut und nur "new String()" gelesenGuido Krüger hat gesagt.:Soll ein String physikalisch kopiert werden, kann das mit Hilfe eines speziellen Konstruktors erreicht werden:
String s2 = new String(s1);
Da der interne Puffer hierbei kopiert wird, ist der Aufruf natürlich ineffizienter als die einfache Zuweisung.