Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
Наконец, в третьей строке переменной типа char присваивается результат сложения числа 5, приведенного к типу byte, и символьного литерала.
Однако все эти примеры корректны. Для удобства разработчика компилятор проводит дополнительный анализ при присвоении значений переменным типа byte, short и char. Если таким переменным присваивается величина типа byte, short, char или int, причем ее значение может быть получено уже на момент компиляции, и оказывается, что это значение укладывается в диапазон типа переменной, то явного приведения не требуется. Если бы такой возможности не было, пришлось бы писать так:
byte b=(byte)1 ; // преобразование необязательно short s=(short)(2+3); // преобразование необязательно char c=(char)((byte)5+'a'); // преобразование необязательно
// преобразование необходимо, так как // число 200 не укладывается в тип byte byte b2=(byte)200;
Вызов метода
Это приведение возникает в случае, когда вызывается метод с объявленными параметрами одних типов, а при вызове передаются аргументы других типов. Объявление методов рассматривается в следующих лекциях курса, однако такой простой пример вполне понятен:
// объявление метода с параметром типа long void calculate(long I) {
}
void main() { calculated);
}
Как видно, при вызове метода передается значение типа int, а ч£ long, как определено в объявлении этого метода.
sP^- —=-------------- !— ---------- =--------- ц
Здесь компилятор предпринимает те же шаги, что и при приведении в процессе присвоения значений переменным. Если типы образуют запрещенное преобразование, возникнет ошибка.
// пример вызовет ошибку компиляции
void calculate(long а) {
}
void main() {
calculate(new Long(5)); // здесь будет ошибка
}
Если сужение, то компилятор не сможет осуществить приведение и потребуются явные указания.
void calculate(int а) { }
void main() { long a=5;
// calculate(a); // сужение! так будет ошибка. calculate((int)a); // корректный вызов
}
Наконец, в случае расширения, компилятор осуществит приведение сам, как и было показано в примере в начале этого раздела.
Надо отметить, что, в отличие от ситуации присвоения, при вызове Методов компилятор не производит преобразований примитивных значений от byte, short, char или int к byte, short или char. Это привело бы к Усложнению работы с перегруженными методами. Например: