Integer.valueOf() vs. Integer.parseInt()
Помимо Integer.parseInt()
обработки знака минус (как задокументировано), существуют ли другие различия между Integer.valueOf()
и Integer.parseInt()
?
И поскольку ни один из них не может анализировать ,
как разделитель тысяч decimal тысяч (производит NumberFormatException
), существует ли уже доступный Java-метод для этого?
Ответы
Ответ 1
Собственно, valueOf
использует parseInt
внутренне. Разница parseInt
возвращает примитив int
, а valueOf
возвращает объект Integer
. Рассмотрим из источника 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));
}
Что касается разбора запятой, я не знаком с ней. Я бы их санировал.
int million = Integer.parseInt("1,000,000".replace(",", ""));
Ответ 2
Первый вопрос: Разница между parseInt и valueOf в java?
Второй вопрос:
NumberFormat format = NumberFormat.getInstance(Locale.FRANCE);
Number number = format.parse("1,234");
double d = number.doubleValue();
Третий вопрос:
DecimalFormat df = new DecimalFormat();
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator('.');
symbols.setGroupingSeparator(',');
df.setDecimalFormatSymbols(symbols);
df.parse(p);
Ответ 3
Integer.valueOf()
возвращает объект Integer , а Integer.parseInt()
возвращает int
примитив.
Ответ 4
parseInt()
анализирует String
до int
, а valueOf()
дополнительно обертывает этот int
в Integer
. Это единственное различие.
Если вы хотите иметь полный контроль над целыми числами синтаксического анализа, посмотрите NumberFormat
с различными локалями.
Ответ 5
Разница между этими двумя методами:
-
parseXxx()
возвращает примитивный тип
-
valueOf()
возвращает ссылку на объект-оболочку типа.