Dav*_*ide 10 java autoboxing wrapper
有以下代码:
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);
Run Code Online (Sandbox Code Playgroud)
它打印:
12.0
这个不编译.为什么?
Integer time = 12;
Double lateTime = 12.30;
Double result = time; //Integer cannot be converted to Double
System.out.println(result);
Run Code Online (Sandbox Code Playgroud)
Bat*_*eba 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三元条件运算符相对于盒装基元类型的机制是该语言中最有害的部分之一.