Преобразования ссылочных типов - 1

— А теперь небольшой урок от Диего. Кратко и по существу о преобразовании ссылочных типов.

— Начнем мы пока только с переменной типа Object. Этой переменной можно присвоить ссылку любого типа (расширение типа). Но чтобы выполнить обратное присваивание (сужение типа) приходится явно указывать операцию приведения:

Код Описание
String s = "mama";
Object o = s;  // o хранит String
Типичное расширение ссылочного типа
Object o = "mama";// o хранит String
String s2 = (String) o;
Типичное сужение ссылочного типа.
Integer i = 123;  //o хранит Integer
Object o = i;
Расширение типа.
Object o = 123;  //o хранит Integer
String s2 = (String) o;
Ошибка во время исполнения!
Невозможно привести ссылку на число к ссылке на строку.
Object o = 123;  //o хранит Integer
Float s2 = (Float) o;
Ошибка во время исполнения!
Невозможно привести ссылку на целое число к ссылке на дробное число.
Object o = 123f;  // o хранит Float
Float s2 = (Float) o;
Приведение к своему типу. Операция сужения ссылочного типа.

— При расширении или сужении ссылочных типов никакого изменения объекта не происходит. Сужающей (или расширяющей) является именно операция присваивания, при которой, либо выполняется «проверка соответствия типов переменной и ее нового значения» либо нет.

— Тот редкий пример, когда все ясно и понятно.

— Чтобы не было ошибок, как в примерахесть способ узнать, какой именно тип сохранили в переменную типа Object:

Код
int i = 5;
float f = 444.23f;
String s = "17";
Object o = f;                       //o хранит объект типа Float

if (o instanceof  Integer)
{
    Integer i2 = (Integer) o;
}
else if (o instanceof  Float)        
{
    Float f2 = (Float) o;            //отработает именно этот if
}
else if (o instanceof  String)
{
    String s2 = (String) o;
}
undefined
10
Задача
Java Syntax Pro, 10 уровень, 6 лекция
Недоступна
StringTokenizer
Используя StringTokenizer раздели query на части по разделителю delimiter. Пример: getTokens("java.util.stream", "\\.") возвращает массив строк {"java", "util", "stream"}

— Желательно выполнять такую проверку перед каждым сужением типа, если тип сохраненного объекта на 100% не известен.

— Понятно.

undefined
10
Задача
Java Syntax Pro, 10 уровень, 6 лекция
Недоступна
String.format()
Сделай так, чтобы метод format(String name, int salary) возвращал строку в таком виде: Меня зовут <name>. Я буду зарабатывать $$<salary> в месяц. Для этого используй метод String.format().
undefined
10
Задача
Java Syntax Pro, 10 уровень, 6 лекция
Недоступна
String pool
Метод equal(String, String) сравнивает строки по ссылке, используя оператор ==. Нужно сделать так, чтобы метод возвращал true, если содержимое строк одинаковое, и false - если разное, не используя метод equals().