Différence entre parseInt et value of en java?

Quelle est la différence entre ces deux méthodes? Ils semblent faire exactement la même chose à moi (va aussi pour parseFloat() , parseDouble() , parseLong() etc, En quoi sont-ils différents de Long.valueOf(string) ?

éditer: aussi, lequel de ceux-ci est préférable et utilisé le plus souvent par convention?

370
demandé sur Click Upvote 2009-02-03 22:56:56

11 réponses

Eh bien, L'API pour Integer.valueOf(String) ne dit en effet que le String est interprété exactement comme si elle a été donnée à Integer.parseInt(String) . Toutefois, valueOf(String) renvoie une new Integer() objet alors que parseInt(String) renvoie une primitive int .

si vous voulez profiter des avantages potentiels de la mise en cache Integer.valueOf(int) , vous pourriez aussi utilisez cette horreur:

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

maintenant, si ce que vous voulez est l'objet et non le primitif, alors utiliser valueOf(String) peut être plus attrayant que de faire un nouvel objet à partir de parseInt(String) parce que le premier est constamment présent à travers Integer , Long , Double , etc.

345
répondu Zach Scrivena 2009-02-03 23:50:26

de ce forum :

parseInt() renvoie l'entier primitif type ( int ), par lequel valueOf retourne de java.lang.Entier , qui est l'objet représentant de l'entier. Y sont circonstances où vous pourriez un objet Integer, au lieu de type de primitive.

de bien sûr, une autre différence évidente est-ce que intValue est une méthode d'instance où parseInt est une méthode statique.

67
répondu Michael Haren 2009-02-03 20:06:40
Integer.valueOf(s)

est similaire à

new Integer(Integer.parseInt(s))

La différence est valueOf() renvoie un Integer , et parseInt() renvoie un int (un type primitif). Notez également que valueOf() peut renvoyer une instance Integer en cache, ce qui peut causer des résultats confus lorsque le résultat des tests == semble par intermittence correct. Avant autoboxing il pourrait y avoir une différence de commodité, après java 1.5 it n'a pas vraiment d'importance.

de plus, Integer.parseInt(s) peut aussi prendre le type de données primitif.

34
répondu Joao da Silva 2015-05-01 10:11:52

regardez les sources Java: valueOf utilise 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 renvoie int

/**
 * 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);
}
14
répondu Paul Verest 2014-10-28 08:53:29

entier.parseInt peut simplement retourner int comme type natif.

entier.valueOf peuvent avoir besoin d'allouer un objet Integer, à moins que entier se trouve être l'un des préaffectés. Cela coûte de plus en plus.

si vous avez besoin de type natif, utilisez parseInt. Si vous avez besoin d'un objet, utilisez value of.

aussi, à cause de cette allocation potentielle, l'autoboxing n'est pas vraiment une bonne chose dans tous les sens. Il peut ralentir les choses.

5
répondu iny 2009-02-03 20:28:28

parce que vous utilisez peut-être jdk1.5 + et là il est auto conversion en int. Donc dans votre code son premier retour entier puis auto converti en int.

votre code est le même que

int abc = new Integer(123);
2
répondu MAR 2015-07-18 10:44:17

L'analyse* les variations de retour de types primitifs et les valueOf versions de retour des Objets. Je crois que la valeur des versions utilisera également un pool de référence interne pour retourner le même objet pour une valeur donnée, et pas seulement une autre instance avec la même valeur interne.

1
répondu basszero 2009-02-03 20:02:37

Depuis valueOf renvoyer un nouvel objet Integer pourquoi le code ci-dessous est correct?

String base5String = "230";
int result = Integer.valueOf(base5String);
0
répondu curious 2010-12-13 23:51:44

si vous vérifiez la classe entière, vous trouverez la méthode valueof call parseInt. La grande différence est la mise en cache lorsque vous appelez valueof API . Il cache si la valeur est entre -128 à 127 S'il vous plaît trouver ci-dessous le lien pour plus d'information

http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html

0
répondu Anuj Kumar Jha 2014-07-23 17:58:28

public static Integer valueOf (String s)

  1. l'argument est interprété comme représentant un entier décimal signé, exactement comme si l'argument était donné au parseInt(java.lang.Chaîne de caractères) de la méthode.
  2. le résultat est un objet entier qui représente la valeur entière spécifiée par la chaîne.

  3. en d'autres termes, cette méthode renvoie un objet entier égal à la valeur de: Nouveau entier (entier.parseInt (s))

0
répondu shuaihanhungry 2015-09-29 03:31:14
  1. en cas de ValueOf -> il crée un objet entier. pas un type primitif et non pas une méthode statique.
  2. dans le cas de ParseInt.ParseFloat - > il renvoie le type primitif respectif. et est une méthode statique.

nous devrions utiliser n'importe lequel en fonction de nos besoins. En cas de valeur de comme il instancie un objet. il consommera plus de ressources si nous n'avons besoin que de la valeur d'un texte, alors nous devrions utiliser parseInt, parseFloat etc.

-2
répondu 2009-08-26 07:08:04