有以下代码:
Integer time = 12;
Double lateTime = 12.30;
Boolean late = false;
Double result = late ? lateTime : time; //Why here can I assign an Integer to a Double?
System.out.println(result);
打印:
12.0
这个没有编译。为什么呢?
Integer time = 12;
Double lateTime = 12.30;
Double result = time; //Integer cannot be converted to Double
System.out.println(result);
答案 0 :(得分:12)
差异是由于Java中的三元运算符行为造成的。
三元条件案例
在表达式late ? lateTime : time
中,Java将自动将其中一个参数(根据late
的值)自动取消打包到其各自的基本类型。 (您可以通过将time
设置为null
并将late
设置为true
来观察此情况:NullPointerException
不投掷。同样将lastTime
设置为null
和late
设置为false
时适用。)
如果表达式的值为time
,则加宽为double
。
在任何一种情况下,生成的double
都会自动加到Double
,并将其分配给result
。
简单的作业案例
在写Double result = time;
时,Java不允许这样做,因为它希望你更明确。
就个人而言,我发现Java三元条件运算符相对于盒装基元类型的机制是该语言中最有害的部分之一。