Converter para String

Ae pessoal, a pergunta é meio besta mas gostaria de saber a opnião de vcs ???

Você costuma fazer isso

  1.  [b]String x = String.valueOf(4);[/b]
    

ou
2) String x = “” + 4;

Tem diferença entre 1 e o 2 ??? Uma maneira pode ser mais rapida que a outra ???

Valeu

Eu costumo fazer da segunda maneira, eu acho mais prático. Mas acho que da primeira maneira seria mais elegante hehehe

Olá sakurai

Eu prefiro a primeira forma, porque é mais elegante mesmo, como Felipe acabou de falar =)

Até mais,

Eu também costumo fazer da 1º Forma, acho que o codigo fica mais bonito.

Mas alguém sabe se tem alguma diferença ? se um modo é mais rapido que o outro ?

Valeu

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.

Até mais,

Testei aqui também o String.valueOf() é quase 2 vezes mais rapido (pelo menos na minha maquina).

[code]Usando o “” + i

C:>java Teste
Tempo decorrido: 70 ms.

Usando o String.valueOf(i)
C:>java Teste
Tempo decorrido: 40 ms.[/code]

Obrigado.

É o esperado. A segunda forma tem que concatenar strings.

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 &lt; N; i++) { 
        b.append("" + i); 
        // b.append(String.valueOf(i)); 
    } 
    long fim = System.currentTimeMillis(); 
    System.out.println("Tempo decorrido: " + (fim - inicio) + " ms."); 
} 

}

Abraço a todos.

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

Até mais,

Opa,
Gurizada… vejam o que eu fiz:

Fonte:

String asd=""+1;
String qwe=String.valueOf(1);

Compilado e descompilado:

String s = "1";
String s1 = String.valueOf(1);

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:

String asd=""+1;

mas sim:

String asd=""+num;

É isso!