W3docs

Как преобразовать int в String в Java

Преобразование int в строку в Java с помощью Integer.toString, String.valueOf и конкатенации.

Преобразование int в String — одна из самых распространённых операций в Java: она нужна при записи числа в лог, формировании сообщения или сохранении значения в файл. JDK предоставляет несколько способов сделать это, и все они дают одинаковый текст. В этой главе рассматриваются идиоматичные варианты и ситуации, когда стоит использовать каждый из них.

Integer.toString — прямой вызов

Наиболее явный и понятный способ — Integer.toString(int). Он точно выражает намерение и возвращает десятичное представление числа в виде текста:

int n = 256;
String s = Integer.toString(n); // "256"

Именно этот метод вызывается внутри String.valueOf и конкатенации, поэтому он считается каноническим способом преобразования. Отрицательные значения сохраняют знак (Integer.toString(-7) возвращает "-7"), а результат никогда не бывает null.

String.valueOf — безопасность к null и перегрузки

String.valueOf перегружен для каждого примитивного типа, поэтому один вызов подходит для int, long, double, boolean и char:

int n = 256;
String s = String.valueOf(n); // "256"

Для int он просто делегирует вызов Integer.toString, поэтому результат идентичен. Многие разработчики предпочитают его, потому что одно имя охватывает все примитивы, и это стандартный выбор при преобразовании ссылки на объект, которая может быть null (метод возвращает "null" вместо исключения).

Конкатенация строк — быстро, но следите за затратами

Добавление int к пустой строке выполняет преобразование:

int n = 256;
String s = "" + n; // "256"

Это лаконично и допустимо для разовых случаев, однако компилятор превращает такую операцию в обращение к StringBuilder. Внутри цикла многократное использование "" + n создаёт множество временных объектов; в таких случаях предпочтительнее Integer.toString или единственный StringBuilder.

String.format и преобразования с основанием

Когда нужны отступы, знак или недесятичное основание, используйте String.format или методы Integer, поддерживающие основание:

String padded = String.format("%05d", 42);   // "00042"
String hex    = Integer.toString(255, 16);    // "ff"
String binary = Integer.toBinaryString(255);  // "11111111"

Ниже показано, как сравниваются повседневные варианты:

ПодходЛучше всего дляПримечание
Integer.toString(n)Обычный десятичный текстКанонический; никогда не null
String.valueOf(n)Одно имя для всех примитивовДелегирует в Integer.toString
"" + nБыстрое встроенное использованиеИзбегайте в плотных циклах
String.format("%05d", n)Отступы / форматированиеЗависит от локали, медленнее
Integer.toString(n, radix)Текст в hex, двоичном, восьмеричномОснование 2–36

Рабочий пример

Эта программа запускает каждый вариант на одном и том же значении, подтверждает, что три распространённых метода дают одинаковые строки, и показывает форматирование и вывод с разными основаниями.

java— editable, runs on the server

Что следует вынести из выполнения программы:

  • Integer.toString(-42), String.valueOf(-42) и "" + (-42) — все выводят -42: три распространённых способа взаимозаменяемы для обычного десятичного текста.
  • Строка equal? выводит true, подтверждая, что три результата посимвольно идентичны, поскольку String.valueOf и конкатенация оба проходят через Integer.toString.
  • Знак минуса сохраняется при преобразовании, и результирующая строка имеет длину 3 (-, 4, 2) — знак минус считается как символ.
  • String.format("%05d", 42) выводит 00042, демонстрируя, как директива %05d дополняет нулями до минимальной ширины пять.
  • Integer.toBinaryString(255) выводит 11111111, а Integer.toString(255, 16) выводит ff, демонстрируя, что int можно представить в любом основании, а не только в десятичном.

Практика

Практика
Какой вызов преобразует int в обычную десятичную строку String и является каноническим методом, к которому String.valueOf(int) обращается внутренне?
Какой вызов преобразует int в обычную десятичную строку String и является каноническим методом, к которому String.valueOf(int) обращается внутренне?

Связанные главы

Was this page helpful?