Преобразование типов данных
Автоматическое преобразование типов данных в языке программирования java происходит в том случае, если мы присваиваем одной переменной значение переменной другого типа, и при этом выполняются следующие условия:
- типы данных должны быть совместимы (например, нельзя присваивать переменной типа boolean значение типа int);
- тип данных переменной, которой присваивается значение, должен быть больше по размеру типа данных переменной, чье значение присваивается.
Например, можно преобразовывать значение типа short в тип int. Это называется расширяющим преобразованием.
А вот если вам понадобится преобразовать значение типа long в значение типа short, автоматически этого не произойдет. Данное преобразование приходится осуществлять вручную — это называется сужающим преобразованием.
Чтобы сопоставить такие несовместимые типы, необходимо явно указать операцию приведения типов, например:
long 1 = 111111111; short s; s = (short) 1; // Приведение типов.
Другая операция, под названием усечение, происходит при присвоении значения с плавающей точкой переменной с целым типом. Скажем, значение 1.11 будет усекаться до значения 1.
Чтобы узнать, совместимы ли два типа данных, необходимо использовать оператор instanceof. Приведу пример его использования — пояснения см. в комментариях (листинг 2.8).
Листинг 2.8.
Пример использования оператора instanceof
Type i; Туре2 j; if (i instanceof Туре2) // Если тип переменной i совместим с типом данных Туре2, то: j = (Туре2) i; // Преобразуем значение i в Туре2.
Искусственно можно преобразовывать значения почти любых типов данных в иные типы данных (например, преобразовать строку в любой тип данных, используя методы, которые предлагает класс String). Для этого необходимо применять методы так называемых классов-оболочек из пакета java.util (подробнее об этом говорится в главе ”Знакомьтесь: пакеты”).
Здравствуйте, долго искал по опратору instanceof, но все равно не понятно:
String stroka = “”;
boolean proverka;
proverka = stroka instanceof Integer;
Почему не работает такая программа? Как я понял, instanceof выдает true/false, но с классами типа Integer/Character/Double и т.д. работать не хочет… В чем дело?
В данном примере компилятор выдает ошибку еще до выполнения кода, поскольку классы String и Integer не могут быть автоматически преобразованы друг к другу и не состоят в связях наследования.