代码之家  ›  专栏  ›  技术社区  ›  Hamza Belmellouki

在条件表达式中混合整数和双精度

  •  1
  • Hamza Belmellouki  · 技术社区  · 6 年前

    来自Java书籍:

    混合时 Integer Double 输入条件表达式,然后 整数 double ,然后装进一个盒子里 双倍 :

        Integer a = 1;
        Double b = 2.0;
        System.out.println(true? a : b); // 1.0
    

    整数 转换为 双倍 在这个条件表达式中?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Andy Turner    6 年前

    当条件运算符的第二个和第三个操作数是不同类型的数时, binary numeric promotion

    在这种情况下, Double double ; Integer int ,然后扩大到 双重的 .

    换句话说,这种情况正在发生:

    System.out.println(true? (double) a.intValue() : b.doubleValue());
    

    条件运算符就是这样定义的。


    请注意,这种行为被认为是非常恶劣的 a compiler error in Google's Java code .

    Number :

    System.out.println(true ? (Number) a : (Number) b);
    

    将打印 1 .

        2
  •  1
  •   J Zou    6 年前

      Integer x = true?a:b;
    

    它将有编译错误,您必须转换为整数才能将x更改为Double,因为编译器直到运行时才检查条件表达式,结果可能是Double,在您的情况下,System.out.println实际上是打印Double。

    希望这能回答你的问题。