Acabei de fazer uns teste aqui, e o String.valueOf(4) se mostrou mais rápido que a conversão do “” + 4.
public class Teste {
public static void main(String[] args) {
final int N = 100000;
StringBuilder b = new StringBuilder();
long inicio = System.currentTimeMillis();
for (int i = 0; i < N; i++) {
b.append("" + i);
// b.append(String.valueOf(i));
}
long fim = System.currentTimeMillis();
System.out.println("Tempo decorrido: " + (fim - inicio) + " ms.");
}
}
Execute várias vezes com cada uma das duas formas e veja aí. Aqui, na grande maioria das vezes, o String.valueOf demorou menos tempo.
A segunda forma primeiro faz a conversao e depois concatena…enquanto a segunda, alem de mais “elegante”, soh converte. o que eh para ser mais rapido mesmo…
CD1, gostei do seu exemplo. Eu só não entendi essa classe StringBuilder, ela faz parte da biblioteca padrão 1.4 ou você a escreveu?
public class Teste {
public static void main(String[] args) {
final int N = 100000;
StringBuilder b = new StringBuilder();
long inicio = System.currentTimeMillis();
for (int i = 0; i < N; i++) {
b.append("" + i);
// b.append(String.valueOf(i));
}
long fim = System.currentTimeMillis();
System.out.println("Tempo decorrido: " + (fim - inicio) + " ms.");
}
[quote]CD1, gostei do seu exemplo. Eu só não entendi essa classe StringBuilder, ela faz parte da biblioteca padrão 1.4 ou você a escreveu?
[/quote]
lcgomes,
A classe StringBuilder faz parte da biblioteca-padrão do Java a partir da versão 5. Ela faz a mesma coisa que a classe StringBuffer, porém, ela não é sincronizada (não é preparada para ser usada com threads), o que a torna mais rápida que a classe StringBuffer. Ou seja, se o buffer não estiver sendo compartilhado entre threads (como eu acho que é na maioria das vezes), use o StringBuilder, que é mais rápido.
Ou seja, o compilador, pelo menos o da Sun, é inteligente o suficiente para deixar o código melhor, porém isso somente com int de valor literal ou final int.
portanto, em geral o String.valueOf(int) é melhor!
Até porque ninguem iria fazer um código: