529 Stimmen

Unterschied zwischen parseInt() und valueOf() in Java?

Wie ist parseInt() verschieden von valueOf() ?

Für mich scheinen sie genau das Gleiche zu tun (gilt auch für parseFloat() , parseDouble() , parseLong() usw., wie unterscheiden sie sich von Long.valueOf(string) ?

Welcher dieser beiden Begriffe ist zu bevorzugen und wird üblicherweise am häufigsten verwendet?

481voto

Zach Scrivena Punkte 28381

Nun, die API für Integer.valueOf(String) sagt in der Tat, dass die String wird genau so interpretiert, als ob es an Integer.parseInt(String) . Allerdings, valueOf(String) gibt eine new Integer() Objekt, während parseInt(String) gibt ein primitives int .

Wenn Sie die potenziellen Vorteile des Caching nutzen möchten Integer.valueOf(int) können Sie auch diesen Schandfleck nutzen:

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

Wenn Sie nur das Objekt und nicht das Primitiv wollen, dann können Sie mit valueOf(String) attraktiver sein kann als die Herstellung eines neuen Objekts aus parseInt(String) weil ersteres durchgängig in allen Bereichen vorhanden ist Integer , Long , Double , usw.

88voto

Michael Haren Punkte 101002

Von dieses Forum :

parseInt() liefert primitive Ganzzahl Typ ( int ), wobei valueOf gibt zurück. java.lang.Integer der das Objekt ist das für die ganze Zahl steht. Es gibt gibt es Umstände, unter denen Sie vielleicht ein Integer-Objekt, statt eines primitiven Typs.

Natürlich gibt es einen weiteren offensichtlichen Unterschied ist, dass intWert ist eine Instanzmethode wobei parseInt ist eine statische Methode.

49voto

Joao da Silva Punkte 6993
Integer.valueOf(s)

ist vergleichbar mit

new Integer(Integer.parseInt(s))

Der Unterschied ist valueOf() gibt eine Integer y parseInt() gibt eine int (ein primitiver Typ). Beachten Sie auch, dass valueOf() kann eine zwischengespeicherte Integer Instanz, was zu verwirrenden Ergebnissen führen kann, wenn das Ergebnis von == Die Tests scheinen mit Unterbrechungen korrekt zu sein. Vor autoboxing es könnte einen Unterschied in der Bequemlichkeit geben, nach Java 1.5 spielt es keine Rolle mehr.

Außerdem, Integer.parseInt(s) kann auch primitive Datentypen annehmen.

29voto

Paul Verest Punkte 55549

Sehen Sie sich die Java-Quellen an: valueOf verwendet 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 gibt zurück. int (nicht 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);
}

7voto

iny Punkte 7005

Integer.parseInt kann nur int als nativen Typ zurückgeben.

Integer.valueOf muss möglicherweise tatsächlich ein Integer-Objekt zuweisen, es sei denn, diese Ganzzahl ist eine der bereits zugewiesenen. Dies kostet mehr.

Wenn Sie nur den nativen Typ benötigen, verwenden Sie parseInt. Wenn Sie ein Objekt benötigen, verwenden Sie valueOf.

Außerdem ist Autoboxing aufgrund dieser potenziellen Zuordnung nicht in jeder Hinsicht eine gute Sache. Es kann die Dinge verlangsamen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X