Bueno, la API para Integer.valueOf(String)
sí dice que String
se interpreta exactamente como si se le hubiera dado Integer.parseInt(String)
. Sin embargo, valueOf(String)
devuelve un objeto mientras que devuelve un primitivo .new
Integer()
parseInt(String)
int
Si desea disfrutar de los beneficios potenciales del almacenamiento en caché Integer.valueOf(int)
, también puede usar esta monstruosidad:
Integer k = Integer.valueOf(Integer.parseInt("123"))
Ahora bien, si lo que quiere es el objeto y no lo primitivo, a continuación, utilizando valueOf(String)
puede ser más atractiva que hacer un nuevo objeto de parseInt(String)
porque el primero es constantemente presente en todo Integer
, Long
, Double
, etc.
Integer.valueOf(Integer.parseInt("123"))
no tiene ningún beneficio sobreInteger.valueOf("123")
oInteger.valueOf(123)
aparte de los ciclos de pérdida y el tamaño de su programa.Integer.valueOf(String)
hace exactamente el mismo almacenamiento en caché queInteger.valueOf(int)
. De hecho, se implementa comoInteger.valueOf(Integer.parseInt(…))
...int
. La firma dice que devuelve unInteger
, y eso es exactamente lo que hace. Esta respuesta también es parcialmente incorrecta cuando dice que devuelve un 'nuevo'Integer
. Eso no es lo que dice en el Javadoc. Es gratis devolver un cachéInteger
.De este foro :
fuente
es parecido a
La diferencia es
valueOf()
devuelve unInteger
, yparseInt()
devuelve unint
(un tipo primitivo). También tenga en cuenta quevalueOf()
puede devolver unaInteger
instancia en caché , lo que puede causar resultados confusos donde el resultado de las==
pruebas parece intermitentemente correcto. Antes del autoboxing podría haber una diferencia en la conveniencia, después de Java 1.5 realmente no importa.Además, también
Integer.parseInt(s)
puede tomar tipos de datos primitivos.fuente
Mira las fuentes de Java:
valueOf
está usandoparseInt
:parseInt
devolucionesint
fuente
Integer.parseInt solo puede devolver int como tipo nativo.
Integer.valueOf en realidad puede necesitar asignar un objeto Integer, a menos que ese entero sea uno de los preasignados. Esto cuesta más
Si solo necesita un tipo nativo, use parseInt. Si necesita un objeto, use valueOf.
Además, debido a esta asignación potencial, el autoboxing no es realmente bueno en todos los sentidos. Puede ralentizar las cosas.
fuente
Las variaciones parse * devuelven tipos primitivos y las versiones valueOf devuelven objetos. Creo que las versiones valueOf también usarán un grupo de referencia interno para devolver el MISMO objeto para un valor dado, no solo otra instancia con el mismo valor interno.
fuente
Debido a que puede estar usando jdk1.5 + y allí se convierte automáticamente a int. Entonces, en su código, primero regresa Integer y luego se convierte automáticamente a int.
tu código es el mismo que
fuente
Si marca la clase Integer, encontrará ese valor del método call parseInt. La gran diferencia es el almacenamiento en caché cuando se llama valueof API. Se almacena en caché si el valor está entre -128 y 127 A continuación, encontrará el enlace para obtener más información
http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html
fuente
public static Integer valueOf (String s)
El resultado es un objeto entero que representa el valor entero especificado por la cadena.
En otras palabras, este método devuelve un objeto Integer igual al valor de: new Integer (Integer.parseInt (s))
fuente
Integer.parseInt acepta solo String y devuelve el tipo entero primitivo (int).
Iteger.valueOf accept int y String. Si el valor es String, valueOf lo convierte al int simple usando parseInt y devuelve un nuevo entero si la entrada es menor que -128 o mayor que 127. Si la entrada está en el rango (-128-127) siempre devuelve los objetos Integer de un IntegerCache interno. La clase entera mantiene una clase IntegerCache estática interna que actúa como caché y contiene objetos enteros de -128 a 127 y es por eso que cuando intentamos obtener un objeto entero para 127 (por ejemplo) siempre obtenemos el mismo objeto.
Iteger.valueOf(200)
dará un nuevo número entero de 200. Es comonew Integer(200)
Iteger.valueOf(127)
es lo mismo queInteger = 127
;Si no va a convertir String al uso Integer
Iteger.valueOf
.Si no puede convertir String al simple int use
Integer.parseInt
. Funciona mas rapido.Y comparando Integer.valueOf (127) == Integer.valueOf (127) devuelve verdadero
Porque toma los objetos Integer con las mismas referencias del caché.
Pero Integer.valueOf (128) == Integer.valueOf (128) es falso, porque 128 está fuera del rango IntegerCache y devuelve un nuevo Integer, por lo que los objetos tendrán referencias diferentes.
fuente
Deberíamos usar cualquiera dependiendo de nuestra necesidad. En el caso de ValueOf ya que está instanciando un objeto. consumirá más recursos si solo necesitamos valor de algún texto, entonces deberíamos usar parseInt, parseFloat, etc.
fuente