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"));
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"));
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
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.
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