web-dev-qa-db-fra.com

Integer.valueOf () vs Integer.parseInt ()

Mis à part Integer.parseInt() qui gère le signe moins (comme documenté), existe-t-il d'autres différences entre Integer.valueOf() et Integer.parseInt()?

Et comme aucun des deux ne peut analyser , comme décimal milliers separator (produit NumberFormatException), existe-t-il déjà une méthode Java pour le faire?

172
ateiob

En fait, valueOf utilise parseInt en interne. La différence est parseInt renvoie une primitive int tandis que valueOf renvoie un objet Integer. Considérez à partir de la source Integer.class:

public static int parseInt(String s) throws NumberFormatException {
    return parseInt(s, 10);
}

public static Integer valueOf(String s, int radix) throws NumberFormatException {
    return Integer.valueOf(parseInt(s, radix));
}

public static Integer valueOf(String s) throws NumberFormatException {
    return Integer.valueOf(parseInt(s, 10));
}

En ce qui concerne l'analyse avec une virgule, je ne suis pas familier avec un. Je les désinfecterais.

int million = Integer.parseInt("1,000,000".replace(",", ""));
218
corsiKa

Première question : Différence entre parseInt et valueOf en java?

Deuxième question :

NumberFormat format = NumberFormat.getInstance(Locale.FRANCE);
Number number = format.parse("1,234");
double d = number.doubleValue();

Troisième question :

DecimalFormat df = new DecimalFormat();
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator('.');
symbols.setGroupingSeparator(',');
df.setDecimalFormatSymbols(symbols);
df.parse(p);
29
Martijn Courteaux

Integer.valueOf() renvoie un entier objet, tandis que Integer.parseInt() renvoie un intprimitive.

20
Joe

La différence entre ces deux méthodes est la suivante:

  • parseXxx() renvoie le type primitif
  • valueOf() renvoie une référence d'objet wrapper du type.
8

parseInt() analyse String en int tandis que valueOf() encapsule en outre cette int dans Integer. C'est la seule différence.

Si vous souhaitez avoir un contrôle total sur l'analyse des entiers, consultez NumberFormat avec différents paramètres régionaux.

8
Tomasz Nurkiewicz