📜  Java条件表达式中的数字类型提升

📅  最后修改于: 2020-03-24 11:00:26             🧑  作者: Mango

条件运算符? :使用一个表达式的布尔值来确定应评估另外两个表达式中的哪一个。
所以,我们期望:

Object o1 = true ? new Integer(4) : new Float(2.0));

与如下相同: 

Object o2;
if (true)
    o2 = new Integer(4);
else
    o2 = new Float(2.0);

但是运行代码的结果给出了意外的结果。

// Java展示条件运算符应该被谨慎使用
import java.io.*;
class GFG
{
    public static void main (String[] args)
    {
        // 表达式 1 (using ?: )
        // 在条件表达式中自动增加值
        Object o1 = true ? new Integer(4) : new Float(2.0);
        System.out.println(o1);
        // 表达式 2 (Using if-else)
        // 在if-else中没有增加值
        Object o2;
        if (true)
            o2 = new Integer(4);
        else
            o2 = new Float(2.0);
        System.out.println(o2);
    }
}

输出:

4.0
4

如果有两个不同的类型作为第二个和第三个操作数,则条件运算符将实现数字类型提升。因此,根据给定的规则,如果一个操作数的类型为double,则另一个转换为double,因此4变为4.0。
而if / else结构,不执行数字类型提升,因此表现如预期。