Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Преобразование типов

Иногда значение одного типа нужно превратить в другой: целое число — в дробное, дробное — в целое, строку "42" — в число. Часть преобразований Java делает сама, остальные нужно попросить явно.

Автоматическое расширение

Если значение переходит в тип, который вмещает больше, Java преобразует его сама. Это называется расширением: int → long → double. Данные при этом не теряются:

void main() {
    int count = 42;
    long big = count;
    double precise = count;
    IO.println(big);
    IO.println(precise);
}

Результат:

42
42.0

Явное приведение

Обратное направление опасно: дробная часть или старшие разряды могут потеряться. Поэтому Java требует явного приведения — тип в скобках перед значением:

void main() {
    double price = 9.99;
    int whole = (int) price;
    IO.println(whole);
}

Результат:

9

Приведение к int отбрасывает дробную часть, а не округляет. Для округления есть Math.round(): Math.round(9.99) вернёт 10. А при приведении большого целого к меньшему типу старшие разряды отбрасываются: (byte) 200 даёт -56. Другие математические методы и точные вычисления с деньгами разобраны в уроке Math и BigDecimal.

Дробное деление

Приведение помогает получить дробный результат из двух целых. Достаточно привести одно из чисел к double до деления:

void main() {
    int done = 7;
    int total = 8;
    double part = (double) done / total;
    IO.println(part);
}

Результат:

0.875

Символы и числа

Каждый символ char хранится как число — его код в таблице Unicode. Приведение показывает этот код и превращает код обратно в символ:

void main() {
    char letter = 'A';
    IO.println((int) letter);
    IO.println((char) 66);
}

Результат:

65
B

Строки и числа

Строку с цифрами нельзя привести через скобки — для этого есть методы Integer.parseInt() и Double.parseDouble(). Обратно число превращает в строку String.valueOf():

void main() {
    int quantity = Integer.parseInt("3");
    double price = Double.parseDouble("2.5");
    IO.println(quantity * price);
 
    String text = String.valueOf(100);
    IO.println(text + "!");
}

Результат:

7.5
100!

Такие преобразования нужны постоянно: всё, что вводит пользователь или приходит из файла, сначала является строкой.

Частая ошибка

Если в строке есть хоть один посторонний символ, parseInt() выбрасывает исключение — сигнал об ошибке, который останавливает программу:

void main() {
    int age = Integer.parseInt("25 лет");
    IO.println(age);
}

Результат:

Exception in thread "main" java.lang.NumberFormatException: For input string: "25 лет"

Пробелы тоже считаются посторонними символами. Как перехватывать исключения и не давать программе падать, расскажет глава об ошибках.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.