Вступление
Преобразование примитива 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,ObjectInteger.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.