Galera, surgiu uma dúvida aqui quando eu estava usando a class Integer, percebi que existem duas maneiras de armazenar um inteiro, na 1ª maneira utilizei o método static valueOf e não foi preciso adicionar o comando new, por que não é preciso? A variável id não é uma variável de referência?
Exemplo:
// 1ª maneiraIntegerid=Integer.valueOf(10);// 2ªmaneiraIntegerid=newInteger(10);
O método estático valueOf serve para converter valores para Integer…
Se você olhar atentamente na documentação ou no próprio auto complete de sua IDE, vai perceber que este método tem varias sobrecargas…
Uma delas é a sobrecarga que é parametrizada por String’s
Integeri=Integer.valueOf("10");
Rodrigo_Sasaki
Acontece que a classe Integer tem um cache dos ints mais requisitados, e se você usar o método estático valueOf ele pode ou te retornar uma referência desse cache, ou instanciar uma nova, com um new.
Se você precisa garantir que seu Integer terá uma referência nova por algum motivo, use o construtor, mas se for indiferente, use o método estático, ele pode te dar uma performance melhor, por causa do cache.
É quase isso, a documentação diz que o valor retornado é igual ao código que você postou, mas não quis dizer que esse código será sempre executado.
Como eu disse, existe aquele cache.
Se você decompilar a classe Integer, vai ver melhor o que o código faz:public static Integer valueOf(String s) throws NumberFormatException {
return Integer.valueOf(parseInt(s, 10));
}
lina
Oi,
Tudo está relacionado a alocação de memoria. Quando você dá um NEW, você trabalha com memoria alocada. Já o valueOf, funciona exatamente igual a explicação de digaoneves.
/**
* Returns a <tt>Integer</tt> instance representing the specified
* <tt>int</tt> value.
* If a new <tt>Integer</tt> instance is not required, this method
* should generally be used in preference to the constructor
* {@link #Integer(int)}, as this method is likely to yield
* significantly better space and time performance by caching
* frequently requested values.
*
* @param i an <code>int</code> value.
* @return a <tt>Integer</tt> instance representing <tt>i</tt>.
* @since 1.5
*/
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}
Tchauzin!
renanjp
digaoneves:
Acontece que a classe Integer tem um cache dos ints mais requisitados, e se você usar o método estático valueOf ele pode ou te retornar uma referência desse cache, ou instanciar uma nova, com um new.
Se você precisa garantir que seu Integer terá uma referência nova por algum motivo, use o construtor, mas se for indiferente, use o método estático, ele pode te dar uma performance melhor, por causa do cache.