Почему условный (тройной) оператор (?:) в 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Есть ли у Python тройной условный оператор?
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Есть ли у Python тройной условный оператор?
    Anonymous » » в форуме Python
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Условный/тройной оператор для назначений в Python? [дублировать]
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Условный/тройной оператор для выражений в Python [Duplicate]
    Anonymous » » в форуме Python
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Условный оператор, общий делегат, ненужное приведение
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

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