New Integer("") x Integer.parseInt("")

3 respostas
wilsontads

Ambos são aceitos, porém, gostaria de saber, qual apresenta uma melhor performance por em uma linha do tipo :

System.out.println(new Integer("010"));

3 Respostas

Lucas_Abbatepaolo

Não se preocupe com performance para este tipo de situação…
na realidade os dois tem objetivos e retornos diferentes…

new Integer("010") // cria um objeto do tipo inteiro (uma instancia da classe wrapper Integer)..não é um tipo primitivo
Integer.parseInt("010")//Aqui vc está chamando um metodo estatico da sua classe Integer que transforma uma String em um int (primitivo)

[]'s

B

http://www.google.com/codesearch#a9vGG9ncPig/src/share/classes/java/lang/Integer.java&ct=rc&cd=5&q=Integer.java

public Integer(String s) throws NumberFormatException { this.value = parseInt(s, 10); }

public static int parseInt(String s) throws NumberFormatException { return parseInt(s,10); }
Dá na mesma.

ViniGodoy

O primeiro é um método construtor. Você acabará com um int criado, associado a um endereço de memória extra, o do objeto. 2 alocações no lugar de uma só. Além disso, você também terá a criação ocorrendo no heap, local onde ficam os objetos no Java, e não no stack, local das variáveis locais e propriedades são criadas. E o pior, após a criação do objeto, você simplesmente o descarta, por causa do auto-unboxing.

No fundo aquele código equivale à:

new Integer("10").intValue();

Não sei se tem alguma otimização da VM que elimina a construção desse objeto (me parece um tipo de construção que seria muito fácil otimizar), mas o fato é que a recomenção é sempre preferir trabalhar com int no lugar de Integer:

Fonte: http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html

Criado 4 de janeiro de 2012
Ultima resposta 4 de jan. de 2012
Respostas 3
Participantes 4