— А теперь самое интересное. Я расскажу тебе про преобразование типов. Хоть типы переменных всегда неизменны, есть место, где можно проводить преобразование типов. И место это – присваивание.

— Можно присваивать друг другу переменные разных типов. При этом значение, взятое из переменной одного типа, будет преобразовано в значение другого типа и присвоено второй переменной.

— В связи с этим, можно выделить два вида преобразования типов: расширение и сужение. Расширение похоже на перекладывание из маленькой корзинки в большую – операция проходит незаметно и безболезненно. Сужение типа – это перекладывание из большой корзинки в маленькую: места может не хватить, и что-то придётся выбросить.

— Вот типы, отсортированные по размеру «корзинки»:

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

— Тут есть пара замечаний:

1. char такая же корзинка, как и short, но свободно перекладывать из одной в другую нельзя: при перекладывании значения из short в char, всегда будут теряться значения меньше 0. При перекладывании из char в short будут теряться значения больше 32-х тысяч.

2. При преобразовании из целых чисел в дробные могут отбрасываться самые младшие части числа. Но т.к. смысл дробного числа в том, чтобы хранить приблизительное значение, то такое присваивание разрешается.

При сужении типа мы должны явно показать компилятору, что мы не ошиблись и отбрасывание части числа сделано намеренно. Для этого используется оператор приведения типа. Это имя типа в круглых скобочках.

— Вот как нужно присваивать переменные разных типов:

Код на Java Описание
byte a = 115;
int b = a;
Расширение типа. Все отлично.
int c = 10000;
byte d = (byte) c;
Сужение типа. Нужно явно отбросить лишние байты.
int c = 10;
byte d = (byte) c;
Сужение типа. Нужно явно отбросить лишние байты, даже если они равны 0.
float f = 10000;
long l = (long) (f * f);
float f2 = l;
long l2 = (long) f2;
При присваивании к float, происходит расширение типа. При присваивании значения float к long, происходит сужение – необходимо приведение типа.
double d = 1;
float f = (float) d;
long l = (long) f;
int i = (int) l;
short s = (short) i;
byte b = (byte) s;
Сужение во всех операциях присваивания, кроме первой строки, требует указания явного преобразования типа.
undefined
10
Задача
Java Syntax Pro, 10 уровень, 3 лекция
Недоступна
Экранирование символов
Выведи на экран следующий текст в две строки: It's Windows path: "C:\Program Files\Java\jdk-13.0.0\bin" It's Java string: \"C:\\Program Files\\Java\\jdk-13.0.0\\bin\" Подсказка: \” – экранирование двойной кавычки; \\ – экранирование обратной косой черты (\). Больше про экранирование символов и Esca

Оператор приведения типа нужно указывать перед числом/переменной каждый раз, когда происходит отбрасывание части числа или сужение типа. Он действует только на число/переменную, которое идет непосредственно за ним.

Код на Java Описание
float f = 10000;
long l = (long) f * f;
К типу long приводится только одна переменная из двух: умножение long и float дает float. Данный пример кода не будет скомпилирован.
float f = 10000;
long l = (long) (f * f);
Тут все выражение приводится к типу long. Этот пример кода будет скомпилирован.

— Ясно.

undefined
10
Задача
Java Syntax Pro, 10 уровень, 3 лекция
Недоступна
Кодировка Unicode
В публичный статический метод init(char[]) передается массив символов размером 9, который нужно заполнить следующими символами: 0 - '\u00A9' 1 - '\u004A' 2 - '\u0061' 3 - '\u0076' 4 - '\u0061' 5 - '\u0052' 6 - '\u0075' 7 - '\u0073' 8 - '\u0068' Чтобы посмотреть результат, запусти метод main().
undefined
10
Задача
Java Syntax Pro, 10 уровень, 3 лекция
Недоступна
Поздравление
Проинициализируй статические переменные следующими значениями: - partyFace - "\uD83E\uDD73" - balloon - "\uD83C\uDF88" - gift - "\uD83C\uDF81" - partyPopper - "\uD83C\uDF89" - cake - "\uD83C\uDF82" Чтобы посмотреть поздравление, запусти метод main().