1. Зачем нужна конвертация типов?
Java — это строго типизированный язык. Если у компьютера есть “коробочка” для числа, то попытка засунуть туда текст — примерно то же самое, что и попытка вставить вилку в USB-разъём. Компилятор вам такое не простит! 😡
Однако, в жизни мы часто работаем одновременно с разными типами данных. Например, у вас есть строка, которая содержит число. Вот тут-то и нужна конвертация (или преобразование) типов.
Рассмотрим пример. Допустим, вы хотите хранить количество пользователей:
int a = 1;
int b = "2";
int c = "три";
Компилятор тут сразу скажет: “Ты меня за кого держишь? Я не умею автоматически преобразовывать строку в число, без тебя никак. Нужно привести строку к числу явно".
В Java есть несколько путей конвертации, и каждый — со своими плюсами, минусами и типичными граблями.
2. Преобразовываем int в String
В нашей работе часто требуется получить строковое представление числа: например, чтобы вывести его на экран, сохранить в файл, передать по сети, объединить с текстом и т.д. В Java для этого существует сразу несколько способов, каждый из которых удобен в разных ситуациях.
Функция String.valueOf()
Это основной и самый распространённый способ:
int number = 42;
String str = String.valueOf(number); // str == "42"
String.valueOf() преобразует число в такую строку, которая соответствует типу переданного в нее объекта.
Конкатенация с пустой строкой
Старый, но рабочий способ:
int number = 42;
String str = "" + number;
Такой подход быстро работает для простых случаев, но менее явен для читающего код программиста.
3. Неявное преобразование в строку
Как уже говорилось выше, разработчики Java сделали так, что абсолютно все переменные, объекты, выражения в Java можно преобразовать к типу String.
Более того, это автоматически происходит, когда мы складываем тип String с каким-нибудь другим типом. Примеры:
int a = 5;
String name = "Аня" + a; // name содержит строку Аня5
int a = 5;
String city = a + "New York" + a; // city содержит строку 5New York5
int number = 10;
String code = "Yo";
String message = "Hello! " + number + code; // message содержит строку Hello! 10Yo
Во всех трёх примерах мы спокойно складывали переменные типа int и String, и в результате всегда получался тип String.
Примеры:
int a = 5;
String name = "1" + a; // name содержит строку 15
int a = 5;
String city = a + "9" + a; // city содержит строку 595
int number = 10;
String code = "10";
String message = "" + number + code; // message содержит строку 1010
Операция сложения выполняется слева направо, так что результат может быть несколько неожиданным. Пример:
int a = 5;
String name = a + a + "1" + a; // name содержит строку 1015
Порядок выполнения: ((a + a) + "1") + a
4. Преобразование строки в число
Чтобы преобразовать число в строку в Java, достаточно сложить его и пустую строку:
String str = "" + число;
А что делать, если нужно преобразовать строку в число? Ну, любую строку в число преобразовать нельзя. Но если строка состоит только из цифр, то всё-таки можно. Для этого в Java есть специальная функция.
Выглядит эта команда так:
int x = Integer.parseInt(строка);
Где int x — это объявление целочисленной переменной x, а строка — это число, заданное в виде строки (строка, состоящая из цифр).
Примеры:
String str = "123";
int number1 = Integer.parseInt(str); // number1 содержит число 123;
int number2 = Integer.parseInt("321"); // number2 содержит число 321
int number3 = Integer.parseInt("321" + 0); // number3 содержит число 3210
int number4 = "321"; // Не скомпилируется: переменная типа int, а значение типа string
Для отрицательных значений это тоже работает: функция Integer.parseInt() очень умная.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ