Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
В этом случае явно указывается, к какому типу требуется привести исходное значение. Допускаются все виды преобразований, кроме приведений к строке и запрещенных. Может возникать ошибка времени исполнения программы.
• Оператор конкатенации производит преобразование к строке своих аргументов.
• Числовое расширение (numeric promotion). Числовые операции могут потребовать изменения типа аргумента(ов). Это преобразование имеет особое название — расширение (promotion), так как выбор целевого типа может зависеть не только от исходного значения, но и от второго аргумента операции.
Рассмотрим все случаи более подробно.
Присвоение значений
Такие ситуации неоднократно применялись в этой лекции для иллюстрации видов преобразования. Приведение может потребоваться, если переменной одного типа присваивается значение другого типа. Возможны следующие комбинации.
Если сочетание этих двух типов образует запрещенное приведение возникнет ошибка. Например, примитивные значения нельзя присваивать объектным переменным, включая следующие примеры:
// пример вызовет ошибку компиляции
// примитивное значение нельзя // присвоить объектной переменной
228
parent р = 3;
// приведение к классу-"обертке" также запрещено Long a=5L;
// универсальное приведение к строке // возможно только для оператора + String s=true;
Далее, если сочетание этих двух типов образует расширение (примитивных или ссылочных типов), то оно будет осуществлено автоматически, неявным для разработчика образом:
int ¡=10; long a=i;
Child с = new Child(); Parent p=c;
Если же сочетание оказывается сужением, то возникает ошибка компиляции, такой переход не может быть проведен неявно:
// пример вызовет ошибку компиляции int ¡=10;
short s=i; // ошибка! сужение!
Parent р = new Child();
Child c=p; // ошибка! сужение!
Как уже упоминалось, в подобных случаях необходимо выполнять преобразование явно:
int i=10; short s=(int)i; Parent p = new Child(); Child c=(Child)p;
Более подробно явное сужение рассматривается ниже. Здесь может вызвать удивление следующая ситуация, которая не порождает ошибок компиляции:
byte b=1; short s=2+3; char c=(byte)5+'a';
В первой строке переменной типа byte присваивается значение цело, численного литерала типа int, что является сужением. Во второй строке переменной типа short присваивается результат сложения двух литералов типа int, а тип этой суммы также int