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?
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(",", ""));
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);
Integer.valueOf()
renvoie un entier objet, tandis que Integer.parseInt()
renvoie un int
primitive.
La différence entre ces deux méthodes est la suivante:
parseXxx()
renvoie le type primitifvalueOf()
renvoie une référence d'objet wrapper du type.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.