Разница между parseInt и valueOf в java?

Какая разница между этими двумя методами? Кажется, что они делают для меня то же самое (также для parseFloat(), parseDouble(), parseLong() и т.д., Как они отличаются от Long.valueOf(string)?

Изменить: Кроме того, какой из них предпочтительнее и чаще используется по соглашению?

Ответ 1

Ну, API для Integer.valueOf(String) действительно говорит, что String интерпретируется точно так, как если бы он был присвоен Integer.parseInt(String). Однако valueOf(String) возвращает объект new Integer(), тогда как parseInt(String) возвращает примитив int.

Если вы хотите использовать потенциальные преимущества кэширования Integer.valueOf(int), вы также можете использовать это бельмо на глазу:

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

Теперь, если вам нужен объект, а не примитив, то использование valueOf(String) может быть более привлекательным, чем создание нового объекта из parseInt(String), потому что первый последовательно присутствует в Integer, Long, Double и т.д.

Ответ 2

Из этот форум:

parseInt() возвращает примитивное целое число type (int), в результате чего valueOf возвращается java.lang.Integer, который является объектом представитель целого числа. Там являются обстоятельствами, в которых вы, возможно, захотите объект Integer, вместо примитивный тип.

Конечно, еще одно очевидное различие что intValue - это метод экземпляра в результате чего parseInt является статическим методом.

Ответ 3

Integer.valueOf(s)

похож на

new Integer(Integer.parseInt(s))

Разница valueOf() возвращает Integer, а parseInt() возвращает int (примитивный тип). Также обратите внимание, что valueOf() может возвращать кешированный экземпляр Integer, что может привести к запутывающим результатам, когда результат тестов == кажется прерывистым. До autoboxing может быть разница в удобстве, после java 1.5 это не имеет особого значения.

Кроме того, Integer.parseInt(s) может также принимать примитивный тип данных.

Ответ 4

Посмотрите на источники Java: valueOf использует 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 возвращает 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);
}

Ответ 5

Integer.parseInt может просто возвращать int как собственный тип.

Integer.valueOf действительно может потребоваться выделить объект Integer, если это целое не является одним из предварительно выделенных. Это стоит больше.

Если вам нужен только собственный тип, используйте parseInt. Если вам нужен объект, используйте значениеOf.

Кроме того, из-за этого потенциального распределения автобоксинг на самом деле не является хорошим делом во всех отношениях. Это может замедлить работу.

Ответ 6

Потому что вы можете использовать jdk1.5 + и там он автоматически преобразуется в int. Таким образом, в вашем коде его первый возвращающий Integer, а затем автоматически преобразуется в int.

ваш код будет таким же, как

int abc = new Integer(123);

Ответ 7

Параметры parse * changes возвращают примитивные типы, а версии valueOf возвращают объекты. Я считаю, что версии valueOf также будут использовать внутренний пул ссылок, чтобы вернуть объект SAME для данного значения, а не только один экземпляр с тем же внутренним значением.

Ответ 8

Так как valueOf возвращает новый объект Integer, почему код ниже правильный?

String base5String = "230";
int result = Integer.valueOf(base5String);

Ответ 9

Если вы проверите класс Integer, вы найдете это значение метода parseInt вызова. Большая разница - это кеширование при вызове значения API. Он кэшируется, если значение находится между -128 и 127. Дополнительную информацию см. Ниже по ссылке

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

Ответ 10

public static Integer valueOf (String s)

  • Аргумент интерпретируется как представляющее десятичное целое число, точно так же, как если бы аргумент был передан методу parseInt (java.lang.String).
  • Результатом является объект Integer, который представляет целочисленное значение, указанное в строке.

  • Другими словами, этот метод возвращает объект Integer, равный значению: new Integer (Integer.parseInt(s))

Ответ 11

  • В случае ValueOf → он создает объект Integer. не примитивный тип, а не статический метод.
  • В случае ParseInt.ParseFloat → он возвращает соответствующий примитивный тип. и является статическим методом.

Мы должны использовать любой, в зависимости от нашей потребности. В случае ValueOf, поскольку он создает экземпляр объекта. он будет потреблять больше ресурсов, если нам нужна только стоимость какого-либо текста, тогда мы должны использовать parseInt, parseFloat и т.д.