Почему условный (тройной) оператор (?:) в Java выполняет приведение типов? ⇐ JAVA

Программисты JAVA общаются здесь
Anonymous
Почему условный (тройной) оператор (?:) в Java выполняет приведение типов?

Сообщение Anonymous »

Я экспериментировал с тернарным оператором () в Java и заметил, что он автоматически выполняет приведение типов к своим выражениям. Например, этот код возвращает 2.0 вместо 2:

Код: Выделить всё

System.out.println(false ? 1.0 : 2);
В обычном условии if-else Java, очевидно, не выполняет приведение типов таким же образом, но с тернарным оператором оно делает.Чтобы определить результирующий тип, я использовал метод getClass() для таких случаев, как различие между int и byte. Для float или double и int разница очевидна, поскольку такие значения, как 2, становятся 2,0.
Это поднимает пару вопросов:
  • Почему тернарный оператор Java вообще выполняет преобразование типов?
  • Оператор, похоже, следует типичной иерархии продвижения типов Java (например, byte -> short -> int -> long -> float). Однако когда используется int, он всегда возвращает другой тип, если int попадает в диапазон этого типа. Например, в приведенном ниже коде результатом является байт со значением 1:

Код: Выделить всё

System.out.println(true ? (int) 1 : (byte) 2);
Это также относится к short в аналогичных сценариях.
Я не проверял все возможные комбинации типов с тернарным оператором, но иногда поведение приведения типов кажется непоследовательным или произвольным.
Как Java решает, какой тип возвращать в этих случаях?

Подробнее здесь: https://stackoverflow.com/questions/791 ... pe-casting

Вернуться в «JAVA»