Что ж, 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
и т.д.
Integer.valueOf(Integer.parseInt("123"))
не имеет преимуществ по сравнению сInteger.valueOf("123")
или вInteger.valueOf(123)
сторону от расточительствуя циклов и размер вашей программы.Integer.valueOf(String)
выполняет точно такое же кэширование, что иInteger.valueOf(int)
. На самом деле, это реализовано какInteger.valueOf(Integer.parseInt(…))
...int
. Подпись говорит, что возвращаетInteger
, и это именно то, что он делает. Этот ответ также частично неверен, когда он говорит, что возвращает «новый»Integer
. Это не то, что говорится в Javadoc. Возврат кешируется бесплатноInteger
.С этого форума :
источник
похоже на
Разница в том, что
valueOf()
возвращаетInteger
иparseInt()
возвращаетint
(примитивный тип). Также обратите внимание, чтоvalueOf()
может возвращать кешированныйInteger
экземпляр, что может привести к сбивающим с толку результатам, если результаты==
тестов кажутся периодически правильными. До автобокса может быть разница в удобстве, после Java 1.5 это не имеет большого значения.Более того,
Integer.parseInt(s)
может принимать и примитивный тип данных.источник
Посмотрите на источники Java:
valueOf
используетparseInt
:parseInt
возвращаетсяint
источник
Integer.parseInt может просто вернуть int как нативный тип.
Integer.valueOf на самом деле может потребоваться выделить объект Integer, если только это целое число не является одним из предварительно выделенных. Это стоит дороже.
Если вам нужен только нативный тип, используйте parseInt. Если вам нужен объект, используйте valueOf.
Кроме того, из-за этого потенциального распределения, автобокс не очень хорошая вещь во всех отношениях. Это может замедлить вещи.
источник
Варианты parse * возвращают примитивные типы, а версии valueOf возвращают Objects. Я полагаю, что версии valueOf также будут использовать внутренний пул ссылок для возврата одного и того же объекта для данного значения, а не просто другого экземпляра с таким же внутренним значением.
источник
Потому что вы можете использовать jdk1.5 + и там он автоматически конвертируется в int. Таким образом, в вашем коде сначала возвращается Integer, а затем автоматически преобразуется в int.
ваш код такой же, как
источник
Если вы проверите класс Integer, вы найдете это значение вызова метода parseInt. Большая разница заключается в кешировании, когда вы вызываете valueof API. Он кэшируется, если значение находится в диапазоне от -128 до 127. Более подробную информацию вы найдете под ссылкой.
http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html
источник
public static Integer valueOf (String s)
Результатом является объект Integer, представляющий целочисленное значение, указанное в строке.
Другими словами, этот метод возвращает объект Integer, равный значению: new Integer (Integer.parseInt (s))
источник
Integer.parseInt принимает только String и возвращает примитивный целочисленный тип (int).
Iteger.valueOf принимает int и String. Если значением является String, valueOf преобразует его в простое int, используя parseInt, и возвращает новое Integer, если входное значение меньше -128 или больше 127. Если входное значение находится в диапазоне (-128 - 127), оно всегда возвращает объекты Integer из внутренний IntegerCache. Целочисленный класс поддерживает внутренний статический класс IntegerCache, который действует как кеш и содержит целочисленные объекты от -128 до 127, и поэтому, когда мы пытаемся получить целочисленный объект для 127 (например), мы всегда получаем один и тот же объект.
Iteger.valueOf(200)
даст новое целое число от 200. Это какnew Integer(200)
Iteger.valueOf(127)
то же самое, что иInteger = 127
;Если вы хотите конвертировать String в Integer, используйте
Iteger.valueOf
.Если вы хотите конвертировать String в простой int, используйте
Integer.parseInt
. Работает быстрее.И сравнивая Integer.valueOf (127) == Integer.valueOf (127) возвращает true
Потому что он берет объекты Integer с одинаковыми ссылками из кэша.
Но Integer.valueOf (128) == Integer.valueOf (128) имеет значение false, поскольку значение 128 выходит за пределы диапазона IntegerCache и возвращает новое значение Integer, поэтому объекты будут иметь разные ссылки.
источник
Мы должны использовать любой в зависимости от наших потребностей. В случае ValueOf, как это экземпляр объекта. он потребляет больше ресурсов, если нам нужно только значение некоторого текста, тогда мы должны использовать parseInt, parseFloat и т. д.
источник