Bem, a API para Integer.valueOf(String)
realmente diz que o String
é interpretado exatamente como se fosse fornecido Integer.parseInt(String)
. No entanto, valueOf(String)
retorna um objeto enquanto retorna um primitivo .new
Integer()
parseInt(String)
int
Se você quiser aproveitar os benefícios potenciais de armazenamento em cache Integer.valueOf(int)
, também poderá usar esta tristeza:
Integer k = Integer.valueOf(Integer.parseInt("123"))
Agora, se o que você quer é o objeto e não o primitivo, em seguida, usando valueOf(String)
pode ser mais atraente do que fazer um novo objeto para fora do parseInt(String)
porque o primeiro é consistentemente presentes em Integer
, Long
, Double
, etc.
Integer.valueOf(Integer.parseInt("123"))
não tem nenhuma vantagem sobreInteger.valueOf("123")
ouInteger.valueOf(123)
para além de ciclos de desperdício e do tamanho do seu programa.Integer.valueOf(String)
faz exatamente o mesmo cache queInteger.valueOf(int)
. Na verdade, ele é implementado comoInteger.valueOf(Integer.parseInt(…))
...int
. A assinatura diz que retorna umInteger
e é exatamente o que faz. Essa resposta também está parcialmente incorreta quando diz que retorna um 'novo'Integer
. Não é isso que diz o Javadoc. É gratuito retornar um cacheInteger
.Deste fórum :
fonte
é similar a
A diferença é
valueOf()
retorna umInteger
eparseInt()
retorna umint
(um tipo primitivo). Observe também quevalueOf()
pode retornar umaInteger
instância em cache , o que pode causar resultados confusos onde o resultado dos==
testes parece intermitentemente correto. Antes da autoboxing , poderia haver uma diferença de conveniência, depois do java 1.5, isso realmente não importa.Além disso, também
Integer.parseInt(s)
pode levar tipos de dados primitivos.fonte
Veja fontes Java:
valueOf
está usandoparseInt
:parseInt
retornaint
fonte
Integer.parseInt pode retornar apenas int como tipo nativo.
O inteiro.valueOf pode realmente precisar alocar um objeto inteiro, a menos que esse inteiro seja um dos pré-alocados. Isso custa mais.
Se você precisar apenas do tipo nativo, use parseInt. Se você precisar de um objeto, use valueOf.
Além disso, devido a essa alocação em potencial, a autoboxing não é realmente boa em todos os aspectos. Pode retardar as coisas.
fonte
As variações de análise * retornam tipos primitivos e as versões valueOf retornam Objetos. Acredito que as versões valueOf também usarão um pool de referência interno para retornar o mesmo objeto para um determinado valor, não apenas outra instância com o mesmo valor interno.
fonte
Porque você pode estar usando o jdk1.5 + e lá está a conversão automática para int. Portanto, no seu código, é o primeiro inteiro que retorna e depois é convertido automaticamente em int.
seu código é o mesmo que
fonte
Se você marcar a classe Integer, encontrará o valor da chamada parseInt. A grande diferença é o armazenamento em cache quando você chama o valor da API. Ele armazena em cache se o valor estiver entre -128 e 127. Encontre abaixo o link para obter mais informações.
http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html
fonte
public static Número inteiro valueOf (String s)
O resultado é um objeto Inteiro que representa o valor inteiro especificado pela sequência.
Em outras palavras, esse método retorna um objeto Inteiro igual ao valor de: new Inteiro (Integer.parseInt (s))
fonte
Integer.parseInt aceita apenas String e retorna o tipo inteiro primitivo (int).
Iteger.valueOf aceita int e String. Se value for String, valueOf converta-o para o int simples usando parseInt e retorne novo Inteiro se a entrada for menor que -128 ou maior que 127. Se a entrada estiver no intervalo (-128 - 127), sempre retornará os objetos Inteiros de um IntegerCache interno. A classe integer mantém uma classe IntegerCache estática interna que atua como cache e mantém objetos inteiros de -128 a 127 e é por isso que quando tentamos obter um objeto inteiro para 127 (por exemplo), sempre obtemos o mesmo objeto.
Iteger.valueOf(200)
dará um novo número inteiro de 200. É comonew Integer(200)
Iteger.valueOf(127)
é o mesmo queInteger = 127
;Se você não converter a String para o número inteiro, use
Iteger.valueOf
.Se você não converter o String no simples int use
Integer.parseInt
. Funciona mais rápido.E comparando Integer.valueOf (127) == Integer.valueOf (127) retorna true
Porque ele leva os objetos Inteiros com as mesmas referências do cache.
Mas Integer.valueOf (128) == Integer.valueOf (128) é falso, porque 128 está fora do intervalo IntegerCache e retorna um novo Integer, portanto, os objetos terão referências diferentes.
fonte
Devemos usar qualquer um, dependendo da nossa necessidade. No caso de ValueOf, ele está instanciando um objeto. consumirá mais recursos se precisarmos apenas de algum texto, então devemos usar parseInt, parseFloat etc.
fonte