Мне интересно, почему метод String.valueOf(int i)
существует? Я использую этот метод для преобразования int
в String
и только что открыл Integer.toString(int i)
метод.
Посмотрев реализацию этих методов, я увидел, что первый вызывает второй. Как следствие, все мои звонки String.valueOf(int i)
включают в себя еще один звонок, чем прямой звонокInteger.toString(int i)
Ответы:
Просто два разных способа сделать одно и то же. Это может быть историческая причина (не могу вспомнить, если один пришел раньше другого).
источник
В строковом типе у нас есть несколько методов valueOf
Как мы видим, эти методы способны разрешить все виды чисел
каждая реализация конкретного метода, как вы представили: так что для целых чисел мы имеем
для двойного
и так далее
На мой взгляд, это не какая-то историческая вещь, но для разработчика более полезно использовать метод
valueOf
из класса String, а не из надлежащего типа, поскольку это приводит к меньшему количеству изменений, которые мы можем внести.Образец 1:
Sample2:
Как мы видим в примере 2, мы должны сделать два изменения, в отличие от образца один.
В моем заключении, использование
valueOf
метода из класса String является более гибким, и поэтому он доступен там.источник
Integer.toString(int i, int radix)
что будет преобразовывать в строки оснований, отличных от 10.String.valueOf(int)
, вы можете использовать ,String.format("%d",i);
чтобы узнать больше , пожалуйста , посетите веб - сайт docs.oracle.com/javase/6/docs/api/java/util/Formatter.htmlint i = new Integer("1");
и наоборот.Одно огромное отличие состоит в том, что если вы вызываете
toString()
в нулевом объекте, вы получите какое-NullPointerException
то время, используя,String.valueOf()
вы можете не проверять нулевое значение.источник
Integer.toString(int i)
,static
метод. Там нетnull
объектов возможно.Integer i = null;
i.toString(); // Null pointer exception!!
String.valueOf(i); // No exception
String.valueOf(int i)
метод, ноString.valueOf(Object obj)
. Во всяком случае, вопрос о примитивныхint
ценностях, где нет возможностиnull
.Integer.toString()
ноInteger.toString(int i)
. Это статический метод ( docs.oracle.com/javase/7/docs/api/java/lang/… ).Класс String предоставляет методы valueOf для всех примитивных типов и типов объектов, поэтому я предполагаю, что это удобные методы, к которым можно получить доступ через один класс.
NB Профилирование результатов
Среднее значение intToString = 5368 мс, среднее значение stringValueOf = 5689 мс (для 100 000 000 операций)
источник
String j
но никогда не используете. Базовый компилятор, возможно, оптимизировал это. Лучше передать объект j другим способом и выполнить несколько фиктивных операций.Из источников Java:
Таким образом, они дают точно такой же результат, и один фактически вызывает другой. String.valueOf более гибок, если вы можете изменить тип позже.
источник
Если вы посмотрите на исходный код для
String
класса, он на самом деле вызывает,Integer.toString()
когда вы звонитеvalueOf()
.Это
Integer.toString()
может быть немного быстрее, если вызовы методов не оптимизированы во время компиляции (что они, вероятно, и есть).источник
Реализация того,
String.valueOf()
что вы видите, является простейшим способом выполнения контракта, указанного в API: «Представление - это именно то, что возвращаетсяInteger.toString()
методом с одним аргументом».источник
Чтобы ответить на вопрос OPs, это просто вспомогательная оболочка для второго вызова, и все сводится к выбору стиля, и это все. Я думаю, что здесь много дезинформации, и лучшее, что может сделать разработчик Java, - это посмотреть на реализацию каждого метода, он находится на расстоянии одного или двух кликов в любой IDE. Вы четко увидите, что
String.valueOf(int)
просто зоветInteger.toString(int)
вас.Следовательно, разница абсолютно нулевая: они оба создают буфер символов, просматривают цифры в числе, затем копируют это в новую строку и возвращают ее (поэтому каждый из них создает один объект строки). Разница лишь в одном дополнительном вызове, который компилятор исключает в любом случае.
Поэтому важно не то, что вы называете, кроме, возможно, согласованности кода. Что касается комментариев о нулях, то он принимает примитив, поэтому он не может быть нулевым! Вы получите ошибку во время компиляции, если не инициализируете передаваемый int. Таким образом, нет никакой разницы в том, как он обрабатывает пустые значения, так как в этом случае они отсутствуют.
источник
Вам не стоит беспокоиться об этом дополнительном звонке, который стоит вам проблем с эффективностью. Если есть какая-либо стоимость, она будет минимальной и должна быть незначительной в общей картине вещей.
Возможно, причина того, что оба существуют, состоит в том, чтобы предложить удобочитаемость. В контексте преобразования многих типов
String
, различные вызовыString.valueOf(SomeType)
могут быть более читабельными, чем различныеSomeType.toString
вызовы.источник
мой openion - valueof (), всегда вызываемый tostring () для представления, и поэтому для представления примитивного типа значение valueof обобщено, и java по умолчанию не поддерживает тип данных, но он определяет свою работу с objaect и классом, все сделал в cllas и сделал object .here Integer.toString (int i) создает ограничение, что преобразование только для целых чисел.
источник
Там нет различий между Integer.toString (5) и String.valueOf (5);
потому что String.valueOf возвращает:
и т.д..
источник
Используя метод String.valueOf (), вам не нужно беспокоиться о данных (будь то int, long, char, char [], boolean, Object), вы можете просто вызвать:
используя единственный синтаксис, String.valueOf () может передать то, что вы передаете в качестве параметра, в String и вернуть ..
В противном случае, если вы используете Integer.toString (), Float.toString () и т. Д. (Например, SomeType.toString ()), вам придется проверить тип данных параметра, который вы хотите преобразовать в строку. Таким образом, лучше использовать String.valueOf () для таких преобразований.
Если у вас есть массив класса объекта, который содержит различные значения, такие как Integer, Char, Float и т. Д., То с помощью метода String.valueOf () вы можете легко преобразовать элементы этого массива в форму String. Напротив, если вы хотите использовать SomeType.toString (), то сначала вам нужно будет узнать об их классах типов данных (возможно, с помощью оператора instanceOf), а затем только вы можете продолжить передачу типов.
Метод String.valueOf () при вызове соответствует передаваемому параметру (будь то его Integer, Char, Float и т. Д.), И с помощью перегрузки метода вызывает тот метод «valueOf ()», параметр которого сопоставляется, а затем внутри этого метода прямой вызов соответствующего метода toString ()
Итак, мы можем видеть, как убираются накладные расходы на проверку типа данных и последующий вызов соответствующего метода toString (). Нужно только вызвать метод String.valueOf (), не заботясь о том, что мы хотим преобразовать в String.
Вывод: метод String.valueOf () имеет значение только за счет еще одного вызова.
источник
нанизывать()
значение()
обрабатывает примитивные типы, а также типы объектов.
проверьте эту ссылку, это очень хорошо. http://code4reference.com/2013/06/which-one-is-better-valueof-or-tostring/
источник