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() возвращает ссылку на объект-оболочку типа.