Java 与其他数字类型对象的双对象初始化
Java Double Object initialization with other Number type objects
在Double object documentation中它只有两个构造函数,一个接受双精度值,一个接受字符串值。但是,我刚刚发现,如果我们用其他 Number 类型的对象初始化它,它也可以工作。例如,以下代码将起作用:
Integer i = Integer.valueOf(10);
Double d1 = new Double(i);
Long l = Long.valueOf(100);
Double d2 = new Double(l);
所以我想知道这背后是什么? Autoboxing/unboxing 会在 Double/double、Long/long 和 Integer/int 之间进行转换,但我不明白为什么 Double 的构造函数会采用其他数据类型。
Long l = Long.valueOf(100);
Double d2 = new Double(l);
上面的代码没有进行 Double(Long)
调用,它进行了可用的 Double(long)
调用,参数从 Long
拆箱到 long
。这仅适用于 long
与 double
.
兼容
所以:
However, I just found that if we initialize it with other Number type objects it will also work.
不,您仍在调用以 double
作为参数的同一个构造函数。
作为旁注,当你手头有一个 Number
对象时,宁可调用它的 doubleValue()
方法来获取原语,而不是通过使用 [=20= 构造它来创建另一个对象]
在Double object documentation中它只有两个构造函数,一个接受双精度值,一个接受字符串值。但是,我刚刚发现,如果我们用其他 Number 类型的对象初始化它,它也可以工作。例如,以下代码将起作用:
Integer i = Integer.valueOf(10);
Double d1 = new Double(i);
Long l = Long.valueOf(100);
Double d2 = new Double(l);
所以我想知道这背后是什么? Autoboxing/unboxing 会在 Double/double、Long/long 和 Integer/int 之间进行转换,但我不明白为什么 Double 的构造函数会采用其他数据类型。
Long l = Long.valueOf(100);
Double d2 = new Double(l);
上面的代码没有进行 Double(Long)
调用,它进行了可用的 Double(long)
调用,参数从 Long
拆箱到 long
。这仅适用于 long
与 double
.
所以:
However, I just found that if we initialize it with other Number type objects it will also work.
不,您仍在调用以 double
作为参数的同一个构造函数。
作为旁注,当你手头有一个 Number
对象时,宁可调用它的 doubleValue()
方法来获取原语,而不是通过使用 [=20= 构造它来创建另一个对象]