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



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



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

709   11  

11 ответов:

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

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

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

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

С этот форум:

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

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

Integer.valueOf(s)

похож на

new Integer(Integer.parseInt(s))

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

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

посмотрите на источники 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);
}

целое число.parseInt может просто вернуть int как собственный тип.

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

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

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

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

ваш код такой же, как

int abc = new Integer(123);

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

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

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

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

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

public static Integer valueOf (String s)

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

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

  1. в случае ValueOf - > создается целочисленный объект. не примитивный тип и не статический метод.
  2. в случае ParseInt.ParseFloat - > возвращает соответствующий тип примитива. и это статический метод.

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

Comments

    Ничего не найдено.