Условный оператор, странное поведение
public static void main(String[] args) {
Object o1;
if (true)
o1 = new Integer(5);
else
o1 = new Double(2.0);
Object o2 = true ? new Integer(5) : new Double(2.0);
System.out.println(o1);
System.out.println(o2);
}
В приведенном выше примере кода, используя условный оператор (?:), я могу переписать приведенный выше пример в одной строке. Итак, я думаю, результат o1 и o2 должен быть одинаковым. Но, как ни странно, результат:
5
5.0
Не могли бы вы, ребята, помочь мне указать, почему это поведение?
ОБНОВЛЕНО:
Результат будет таким же, как в следующем коде:
Object o2 = true ? (Object) new Integer(5) : new Double(2.0);
Ответы
Ответ 1
Это, по-видимому, является побочным эффектом Autoboxing.? оператор пытается определить, который является базовым типом, который может быть применен к объекту. Он видит Double справа и Integer, который также может быть автобоксирован на Double.
Может быть, это так, потому что Integer может быть помечен в Double, но Double не может быть помечен в Integer?
Обратите внимание, что это дает тот же результат...
Object o2 = true ? 5 : new Double(2.0);