225 votos

¿Diferencia entre parseInt y valueOf en java?

¿Cuál es la diferencia entre estos dos métodos? Parece que me hacen exactamente lo mismo (también va para parseFloat() , parseDouble() , parseLong() etc, ¿en qué se diferencian de Long.valueOf(string) ?

Editar: También, ¿cuál de estos es preferible y se utiliza más a menudo por convención?

219voto

Zach Scrivena Puntos 15052

Bueno, el API para Integer.valueOf(String) dice, en efecto, que el String se interpreta exactamente como si se le diera a Integer.parseInt(String) . Sin embargo, valueOf(String) devuelve un new Integer() objeto mientras que parseInt(String) devuelve un primitivo int .

Si quieres disfrutar de los beneficios potenciales del almacenamiento en caché de Integer.valueOf(int) también podrías usar esta monstruosidad:

Integer k = Integer.valueOf(Integer.parseInt("123"))

Ahora, si lo que quieres es el objeto y no lo primitivo, entonces usando valueOf(String) puede ser más atractivo que hacer un nuevo objeto de parseInt(String) porque el primero está constantemente presente a través de Integer , Long , Double etc.

39voto

Michael Haren Puntos 42641

De este foro :

parseInt() devuelve un entero primitivo tipo ( int ), por lo que valueOf retornos java.lang.Integer que es el objeto representante del número entero. Allí son circunstancias en las que podrías querer un objeto entero, en lugar de tipo primitivo.

Por supuesto, otra diferencia obvia es que intValue es un método de instancia en el que parseInt es un método estático.

16voto

Joao da Silva Puntos 3626
valueOf(s)

es similar a

new Integer(Integer.parseInt(s))

La diferencia es valueOf() devuelve un Integer y parseInt() devuelve un int (un tipo primitivo). También hay que tener en cuenta que valueOf() puede devolver un caché Integer que puede causar resultados confusos cuando el resultado de == las pruebas parecen ser intermitentemente correctas. Antes de autoboxing podría haber una diferencia en la conveniencia, después de Java 1.5 no importa realmente.

3voto

iny Puntos 3925

Integer.parseInt puede devolver int como tipo nativo.

Integer.valueOf puede necesitar en realidad asignar un objeto entero, a menos que ese entero sea uno de los preasignados. Esto cuesta más.

Si necesitas sólo el tipo nativo, usa parseInt. Si necesitas un objeto, usa valueOf.

Además, debido a esta asignación potencial, el autoboxing no es en realidad algo bueno en todos los sentidos. Puede ralentizar las cosas.

2voto

MAR Puntos 11

Porque podrías estar usando jdk1.5+ y ahí está la autoconversión a int. Así que en tu código primero devuelve un entero y luego se convierte automáticamente a int.

tu código es el mismo que

int abc = nuevo entero(123);

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X