При прохождении какого-то онлайн-курса он упомянул, что если у нас есть условное выражение в Java, которое возвращает с одной стороны байт или короткий, а с другой стороны – окончательный int, то если значение int соответствует короткому или byte, оно будет преобразовано в соответствие с этим типом. Однако это работает только для финального int, а не для финального короткого типа.
Интересно, какова логика этого, почему компилятор допускает одно понижающее приведение предотвращая при этом другое? Это кажется логичным и правильным, так почему же такое ограничение?
Следующий код работает и компилируется нормально
public class Testing {
public static void main(String[] args) {
final int x = 99;
byte y = 33;
byte r = true ? x : y;
System.out.println(r);
}
}
Но если я изменю его на короткий, то получу ошибку компиляции
public class Testing {
public static void main(String[] args) {
final short x = 99;
byte y = 33;
byte r = true ? x : y;
// java: incompatible types: possible lossy conversion from short to byte
System.out.println(r);
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... -occurs-fo
Почему в условном выражении Java понижение типа возвращаемого значения происходит только для Final int, а не для Final S ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как преобразовать список[int, int, int] в кортеж[int, int, int], а не в кортеж[int, ...]
Anonymous » » в форуме Python - 0 Ответы
- 289 Просмотры
-
Последнее сообщение Anonymous
-