¿Diferencia entre parseInt() y valueOf() en Java?
¿ En qué se parseInt()
diferencia de valueOf()
?
Parece que me hacen exactamente lo mismo (también se aplica a , parseFloat()
etc. , ¿en qué se diferencian de ?parseDouble()
parseLong()
Long.valueOf(string)
Además, ¿cuál de estos es preferible y se usa con más frecuencia por convención?
Bueno, la API de Integer.valueOf(String)
hecho dice que se String
interpreta exactamente como si se le hubiera dado a Integer.parseInt(String)
. Sin embargo, valueOf(String)
devuelve un objeto mientras que devuelve una primitiva .new
Integer()
parseInt(String)
int
Si desea disfrutar de los posibles beneficios del almacenamiento en caché Integer.valueOf(int)
, también puede utilizar esta monstruosidad:
Integer k = Integer.valueOf(Integer.parseInt("123"))
Ahora, si lo que desea es el objeto y no el primitivo, entonces usarlo valueOf(String)
puede ser más atractivo que crear un nuevo objeto parseInt(String)
porque el primero está presente constantemente en Integer
, Long
, Double
, etc.
De este foro :
parseInt()
devuelve un tipo entero primitivo ( int ), por lo quevalueOf
devuelve java.lang.Integer , que es el objeto representativo del número entero. Hay circunstancias en las que es posible que desee un objeto Integer, en lugar de un tipo primitivo.Por supuesto, otra diferencia obvia es que intValue es un método de instancia, mientras que parseInt es un método estático.
Integer.valueOf(s)
es parecido a
new Integer(Integer.parseInt(s))
La diferencia es valueOf()
que devuelve an Integer
y parseInt()
devuelve an int
(un tipo primitivo). También tenga en cuenta que valueOf()
puede devolver una Integer
instancia almacenada en caché, lo que puede provocar resultados confusos cuando el resultado de las ==
pruebas parece intermitentemente correcto. Antes del autoboxing podía haber una diferencia en la conveniencia, después de Java 1.5 realmente no importa.
Además, Integer.parseInt(s)
también puede aceptar tipos de datos primitivos.
Mire las fuentes de Java: valueOf
está usando parseInt
:
/**
* Parses the specified string as a signed decimal integer value.
*
* @param string
* the string representation of an integer value.
* @return an {@code Integer} instance containing the integer value
* represented by {@code string}.
* @throws NumberFormatException
* if {@code string} cannot be parsed as an integer value.
* @see #parseInt(String)
*/
public static Integer valueOf(String string) throws NumberFormatException {
return valueOf(parseInt(string));
}
parseInt
devuelve int
(no Integer
)
/**
* Parses the specified string as a signed decimal integer value. The ASCII
* character \u002d ('-') is recognized as the minus sign.
*
* @param string
* the string representation of an integer value.
* @return the primitive integer value represented by {@code string}.
* @throws NumberFormatException
* if {@code string} cannot be parsed as an integer value.
*/
public static int parseInt(String string) throws NumberFormatException {
return parseInt(string, 10);
}