在Double object documentation中,它只有两个构造函数,一个接受double值,另一个接受string值。然而,我发现如果我们使用其他Number类型对象进行初始化,它也可以工作。例如,以下代码将起作用:
所以我想知道背后的原因是什么?自动装箱/拆箱会在Double/double、Long/long和Integer/int之间进行转换,但我不明白为什么Double的构造函数会接受其他数据类型。
Integer i = Integer.valueOf(10);
Double d1 = new Double(i);
Long l = Long.valueOf(100);
Double d2 = new Double(l);
所以我想知道背后的原因是什么?自动装箱/拆箱会在Double/double、Long/long和Integer/int之间进行转换,但我不明白为什么Double的构造函数会接受其他数据类型。
int
到double
和long
到double
是静默扩展转换。 - shmoselnew Double(i.intValue())
,通过拆箱操作,并且在运行时将int值通过扩展转换为double?而编译器足够聪明,知道在需要double值时将Integer转换为int? - sabcyang