¿Diferencia entre parseInt() y valueOf() en Java?

Resuelto Ali asked hace 15 años • 11 respuestas

¿ 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?

Ali avatar Feb 04 '09 02:02 Ali
Aceptado

Bueno, la API de Integer.valueOf(String)hecho dice que se Stringinterpreta 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.

Zach Scrivena avatar Feb 03 '2009 20:02 Zach Scrivena

De este foro :

parseInt()devuelve un tipo entero primitivo ( int ), por lo que valueOfdevuelve 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.

Michael Haren avatar Feb 03 '2009 20:02 Michael Haren
Integer.valueOf(s)

es parecido a

new Integer(Integer.parseInt(s))

La diferencia es valueOf()que devuelve an Integery parseInt()devuelve an int(un tipo primitivo). También tenga en cuenta que valueOf()puede devolver una Integerinstancia 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.

Joao da Silva avatar Feb 03 '2009 20:02 Joao da Silva

Mire las fuentes de Java: valueOfestá 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));
}

parseIntdevuelve 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);
}
Paul Verest avatar Oct 28 '2014 08:10 Paul Verest