Eu usaria apenas "" + 42, mas ei, sou eu. O formulário 2 resultará em um novo objeto inteiro (para a maioria dos valores de i) como intermediário. Também é mais digitação.
16
@ pst: se o objeto intermediário é um problema para você, então "" + 42não é melhor, pois exige um intermediário StringBuilderque é muito mais pesado que um Integer.
Joachim Sauer
47
"" + 42 pode funcionar, mas é uma má ideia. Pessoas como eu vão olhar o seu código e tentar descobrir o que diabos aconteceu com a string vazia.
Mainguy
3
Eu não recomendaria "" + 42porque, no caso de anexar seqüências de números inteiros, você pode acabar adicionando os valores e não percebendo.
BoltzmannBrain
20
Se você não gosta muito de digitar, provavelmente não deve programar em Java.
Adam Pierce
Respostas:
548
Integer.toStringchama o método estático na classe Integer. Não precisa de uma instância de Integer.
Se você ligar, new Integer(i)criará uma instância do tipo Integer, que é um objeto Java completo que encapsula o valor do seu int. Em seguida, você chamar o toStringmétodo nele para pedir-lhe para voltar a representação de si .
Se tudo o que você deseja é imprimir um int, você usaria o primeiro porque é mais leve, mais rápido e não usa memória extra (além da string retornada).
Se você deseja que um objeto represente um valor inteiro - para colocá-lo dentro de uma coleção, por exemplo -, use o segundo, pois ele fornece um objeto completo para fazer todo o tipo de coisas que você não pode fazer com nada int.
Ele sente um pouco mais direito do que Integer.toString(i)para mim. Quando o tipo de i for alterado, por exemplo, de intpara double, o código permanecerá correto.
Sim. A menos que você deve usar RADIX (nesse caso, você deve usar Integer.toString)
marcolopes
14
new Integer(i).toString();
Esta instrução cria o objeto do Inteiro e, em seguida, chama seus métodos toString(i)para retornar a representação em String do valor do Inteiro .
Integer.toString(i);
Ele retorna o objeto String que representa o int específico (inteiro) , mas aqui toString(int)está um staticmétodo.
Resumo é, no primeiro caso, retorna a representação de sequência de objetos, enquanto que no segundo caso, retorna a representação de sequência de números inteiros.
esta é definitivamente uma forma ruim, porque ela se baseia em uma parte bastante sutil da linguagem Java e é menos eficiente que Integer.toString (i). Veja este post SO
Geralmente, é uma má idéia fazer as coisas de maneira tão pouco intuitiva. Escolhas mais óbvias Integer.toString()podem usar algumas teclas extras, mas são muito mais claras, o que é crucial quando você deseja manter o código.
Calvin Li
Isso não chamaria automaticamente o toString()método da variável inteira ?
Ankit Deshpande
11
Embora eu goste da recomendação de fhucho de
String.valueOf(i)
A ironia é que esse método realmente chama
Integer.toString(i)
Portanto, use String.valueOf(i)se você gosta de ler e não precisa de radix, mas também sabendo que é menos eficiente que Integer.toString(i).
Em termos de medição de desempenho, se você está considerando o desempenho do tempo, então Integer.toString (i); é caro se você estiver ligando menos de 100 milhões de vezes. Caso contrário, se houver mais de 100 milhões de chamadas, o novo Integer (10) .toString () terá um desempenho melhor.
Abaixo está o código através de você pode tentar medir o desempenho,
publicstaticvoid main(String args[]){int MAX_ITERATION =10000000;long starttime =System.currentTimeMillis();for(int i =0; i < MAX_ITERATION;++i){String s =Integer.toString(10);}long endtime =System.currentTimeMillis();System.out.println("diff1: "+(endtime-starttime));
starttime =System.currentTimeMillis();for(int i =0; i < MAX_ITERATION;++i){String s1 =newInteger(10).toString();}
endtime =System.currentTimeMillis();System.out.println("diff2: "+(endtime-starttime));}
Em termos de memória, o
novo inteiro (i) .toString ();
precisará de mais memória, pois criará o objeto toda vez; portanto, ocorrerá a fragmentação da memória.
Eu acho que isso é melhor, porque como @Dhiraj apontou que, em termos de memória, o "novo número inteiro (i) .toString ();" consumirá mais memória porque cria um novo objeto em vez de apenas obter o valor Inteiro e convertê-lo em uma string.
Patricia
4
@Lucy Integer.valueOf (i) retorna um novo Integer, por isso não há diferença
inigoD
Você não está fornecendo uma resposta para a pergunta. A questão é qual é a diferença entre blá e blá, não qual é o melhor substituto para blá.
ahitt6345
2
Maneira simples é apenas concatenar ""com número inteiro:
Aqui
Integer.toStringchama o método estático na classe Inteiro. Não requer que o objeto chame.
Se você ligar new Integer(i)primeiro, crie uma instância do tipo Inteiro, que é um objeto Java completo que encapsula o valor do seu int i. Em seguida, chame o toStringmétodo para solicitar que ele retorne uma representação de string em si.
Integer i =newInteger(8);// returns a string representation of the specified integer with radix 8String retval = i.toString(516,8);System.out.println("Value = "+ retval);
2)new Integer(i).toString()
int i =506;String str =newInteger(i).toString();System.out.println(str +" : "+newInteger(i).toString().getClass());////506 : class java.lang.String
"" + 42
, mas ei, sou eu. O formulário 2 resultará em um novo objeto inteiro (para a maioria dos valores de i) como intermediário. Também é mais digitação."" + 42
não é melhor, pois exige um intermediárioStringBuilder
que é muito mais pesado que umInteger
."" + 42
porque, no caso de anexar seqüências de números inteiros, você pode acabar adicionando os valores e não percebendo.Respostas:
Integer.toString
chama o método estático na classeInteger
. Não precisa de uma instância deInteger
.Se você ligar,
new Integer(i)
criará uma instância do tipoInteger
, que é um objeto Java completo que encapsula o valor do seu int. Em seguida, você chamar otoString
método nele para pedir-lhe para voltar a representação de si .Se tudo o que você deseja é imprimir um
int
, você usaria o primeiro porque é mais leve, mais rápido e não usa memória extra (além da string retornada).Se você deseja que um objeto represente um valor inteiro - para colocá-lo dentro de uma coleção, por exemplo -, use o segundo, pois ele fornece um objeto completo para fazer todo o tipo de coisas que você não pode fazer com nada
int
.fonte
new Integer(i).toString()
primeiro cria um objeto de wrapper (redundante) ao redori
(que por si só pode ser um objeto de wrapperInteger
).Integer.toString(i)
é preferido porque não cria objetos desnecessários.fonte
Outra opção é o
String.valueOf
método estático .Ele sente um pouco mais direito do que
Integer.toString(i)
para mim. Quando o tipo de i for alterado, por exemplo, deint
paradouble
, o código permanecerá correto.fonte
new Integer(i).toString();
Esta instrução cria o objeto do Inteiro e, em seguida, chama seus métodos
toString(i)
para retornar a representação em String do valor do Inteiro .Integer.toString(i);
Ele retorna o objeto String que representa o int específico (inteiro) , mas aqui
toString(int)
está umstatic
método.Resumo é, no primeiro caso, retorna a representação de sequência de objetos, enquanto que no segundo caso, retorna a representação de sequência de números inteiros.
fonte
Eu também recomendo usar
Simples e eficaz.
fonte
Integer.toString()
podem usar algumas teclas extras, mas são muito mais claras, o que é crucial quando você deseja manter o código.toString()
método da variável inteira ?Embora eu goste da recomendação de fhucho de
A ironia é que esse método realmente chama
Portanto, use
String.valueOf(i)
se você gosta de ler e não precisa de radix, mas também sabendo que é menos eficiente queInteger.toString(i)
.fonte
Em termos de medição de desempenho, se você está considerando o desempenho do tempo, então Integer.toString (i); é caro se você estiver ligando menos de 100 milhões de vezes. Caso contrário, se houver mais de 100 milhões de chamadas, o novo Integer (10) .toString () terá um desempenho melhor.
Abaixo está o código através de você pode tentar medir o desempenho,
Em termos de memória, o
precisará de mais memória, pois criará o objeto toda vez; portanto, ocorrerá a fragmentação da memória.
fonte
new Integer(10).toString() can be simplified to Integer.toString(10)
"Melhor:
fonte
Maneira simples é apenas concatenar
""
com número inteiro:agora
s
terá100
como valor de sequência.fonte
Aqui
Integer.toString
chama o método estático na classe Inteiro. Não requer que o objeto chame.Se você ligar
new Integer(i)
primeiro, crie uma instância do tipo Inteiro, que é um objeto Java completo que encapsula o valor do seu int i. Em seguida, chame otoString
método para solicitar que ele retorne uma representação de string em si.fonte
1
Integer.toString(i)
2)
new Integer(i).toString()
fonte