Вступление
Преобразование примитива int
или соответствующего ему класса оболочки
Integer
в String
- обычная и простая операция. То же самое касается
и другого способа преобразования String в
Integer .
Преобразование целого числа в строку
При преобразовании int или Integer в String существует четыре подхода.
Класс String
предоставляет для этой цели несколько методов -
valueOf()
и format()
, хотя уже упомянутый Integer
также
предлагает toString()
который решает эту проблему. Кроме того, вы
также можете рассчитывать на StringBuilder
«s append()
метод, хотя
это не часто используется сценарий:
String.valueOf(int i)
- этот подход считается лучшей практикой из-за простоты. Этот метод также принимает другие типы -boolean
,char
,char[]
,double
,float
,long
,Object
Integer.toString(int i)
- этот подход старше, чемvalueOf()
и просто использует метод, который каждый объект Java должен возвращать String, представляющий данный int. Однако этот подход, в отличие от предыдущего, может возвращатьNullPointerException
.String.format(String format, Object... args)
- возвращает строку, отформатированную в соответствии со спецификатором формата и следующими аргументами.StringBuilder.append(int i).toString()
- То же, чтоvalueOf()
метод, этот метод принимает все примитивные типы с добавлением некоторых других типов , таких какString
,StringBuffer
иCharSequence
.
String.valueOf ()
Метод valueOf()
- это статический метод класса String, который
возвращает строковое представление указанного типа.
Здесь разрешено много типов:
- Объект
- char []
- логический
- символ
- int
- длинный
- плавать
- двойной
Но в этом уроке мы сосредоточимся на int
Возвращенное представление
точно соответствует представлению, возвращаемому Integer.toString()
при передаче того же аргумента:
int i = 12345;
String string = String.valueOf(i);
String otherString = Integer.toString(i);
System.out.println(string.equals(otherString));
System.out.println(string == otherString);
System.out.println(string);
System.out.println(otherString);
Выполнение этого фрагмента кода даст:
true
false
12345
12345
Это имеет смысл, поскольку оба этих метода возвращают новую строку.
Метод equals()
возвращает true, потому что их значение одинаково,
тогда как ==
возвращает false, поскольку их ссылочные переменные не
указывают на один и тот же объект в памяти.
Использование valueOf()
обеспечивает согласованность вашего кода при
преобразовании одного типа данных в другой. В случае valueOf()
также
может кэшировать часто используемые числа, например от -127 до 128,
чтобы ускорить преобразование и уменьшить объем памяти.
По этой причине рекомендуется использовать метод valueOf()
для
преобразования как String, так и Integer.
Integer.toString ()
В этом подходе используется один из наиболее распространенных методов
Java - toString()
общий для всех объектов.
Этот метод имеет множество применений и требует подробного объяснения. Если вы хотите узнать об этом больше, у нас уже есть отличная статья, посвященная этому вопросу!
В этом случае метод возвращает объект String, представляющий указанный int. Аргумент преобразуется в десятичное представление со знаком и возвращается как строка:
int i = 12345;
String string = Integer.toString(i);
String otherString = new Integer(i).toString();
System.out.println(string.equals(otherString));
System.out.println(string == otherString);
System.out.println(string);
System.out.println(otherString);
Выполнение этого фрагмента кода даст:
true
false
12345
12345
Если ваша переменная имеет примитивный тип (int), лучше использовать
Integer.toString(int)
или String.valueOf(int)
. Но если ваша
переменная уже является экземпляром Integer
(класс-оболочка
примитивного типа int), лучше просто вызвать его toString()
как
показано выше.
String.format ()
Возвращает строку, отформатированную в соответствии со спецификатором формата и следующими аргументами. Хотя цель этого метода не столько в преобразовании, сколько в форматировании String, его также можно использовать для преобразования.
Есть довольно много спецификаторов на выбор:
%a
- шестнадцатеричный вывод числа с плавающей запятой%b
- истина, если не ноль, ложь, если ноль%c
- символ Юникода%d
- десятичное целое число%e
- научная запись десятичного целого числа%f
- десятичное число с плавающей запятой%g
- То же, что и выше, но возможно научное, в зависимости от значения%h
- шестнадцатеричная строка возвращаемого значения hashCode ()%n
- разделитель строк%o
- восьмеричное целое число%s
- Строка%t
- преобразование даты / времени%x
- шестнадцатеричная строка
В этом уроке мы сосредоточимся на %d
int i = 12345;
String string = String.format("%d", i);
System.out.println(string);
Выполнение этого фрагмента кода даст:
12345
Метод format()
генерирует IllegalFormatConversionException
если вы
передаете несовместимый тип, например, передаете Integer
для
спецификатора %s
, который ожидает объект String.
Некоторые из наиболее распространенных спецификаторов: %s
для строки,
%d
для десятичного целого числа и %n
.
StringBuilder и StringBuffer
И StringBuffer
и StringBuilder
- это классы, используемые для
объединения нескольких значений в одну строку.
StringBuffer
является потокобезопасным, но медленнее, тогда как
StringBuilder
не является потокобезопасным, но работает быстрее.
int i = 12345;
String string = new StringBuilder().append(i).toString();
String otherString = new StringBuffer().append(i).toString();
System.out.println(string.equals(otherString));
System.out.println(string == otherString);
System.out.println(string);
System.out.println(otherString);
Выполнение этого фрагмента кода даст:
true
false
12345
12345
Заключение
Мы рассмотрели одну из фундаментальных тем Java и общую проблему, с которой сталкиваются разработчики - преобразование int или Integer в String с помощью инструментов, поставляемых с JDK.