Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在条件表达式中混合整数和双精度_Java_Integer_Double_Boxing_Unboxing - Fatal编程技术网

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

Java 在条件表达式中混合整数和双精度,java,integer,double,boxing,unboxing,Java,Integer,Double,Boxing,Unboxing,摘自Java书籍: 在条件表达式中混合使用整数和双精度类型时,整数值将取消装箱,提升为双精度,并装箱为双精度: Integer a = 1; Double b = 2.0; System.out.println(true? a : b); // 1.0 对我来说,这是一个意想不到的结果。在这个条件表达式中,Integer是如何转换成Double的?这是正常的,它与Java编译器有关,如果您有以下代码行: Integer x = true?a:b; 它将有编译错误,

摘自Java书籍:

在条件表达式中混合使用
整数
双精度
类型时,
整数
值将取消装箱,提升为
双精度
,并装箱为
双精度

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

对我来说,这是一个意想不到的结果。在这个条件表达式中,
Integer
是如何转换成
Double
的?

这是正常的,它与Java编译器有关,如果您有以下代码行:

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


希望您能回答您的问题。

当条件运算符的第二个和第三个操作数是不同类型的数时,将按相同类型应用

在这种情况下,
Double
被取消绑定到
Double
Integer
被取消绑定到
int
,然后扩展到
double

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

System.out.println(true? (double) a.intValue() : b.doubleValue());
这就是条件运算符的定义方式


请注意,这种行为被认为是非常恶劣的

如果要将操作数保留为其“实际”类型,则需要将它们强制转换为
Number

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

打印
1

你自己回答了吗?它被解除绑定,然后转换为双精度。