Как преобразовать 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 |
Рабочий пример
Эта программа запускает каждый вариант на одном и том же значении, подтверждает, что три распространённых метода дают одинаковые строки, и показывает форматирование и вывод с разными основаниями.
Что следует вынести из выполнения программы:
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можно представить в любом основании, а не только в десятичном.
Практика
Связанные главы
- Преобразование String в int — обратная операция с
Integer.parseIntи обработкой ошибок. - Форматирование строк в Java — подробнее о директивах
String.format, таких как%05d,%xи%,d. - Конкатенация строк в Java — почему
"" + nпревращается вStringBuilderи когда это важно. - StringBuilder — эффективный способ объединить много чисел в одну строку внутри цикла.