Java int 无法转换为 Double

wei*_*_yu 0 java

为什么铸造会导致错误?根据我的理解,int num将被隐式转换为double,但现在为了避免这个错误,我需要做temp.add((double) num);

public void test(int[] nums) {
        List<Double> temp = new ArrayList<>();
        for (int num: nums) {
            temp.add(num);
        }

    }
Run Code Online (Sandbox Code Playgroud)

错误:

Playground Debug 
Line 6: error: no suitable method found for add(int)
            temp.add(num);
                ^
    method Collection.add(Double) is not applicable
      (argument mismatch; int cannot be converted to Double)
    method List.add(Double) is not applicable
      (argument mismatch; int cannot be converted to Double)
Run Code Online (Sandbox Code Playgroud)

ern*_*t_k 5

您有一个 s 列表,并且您正在尝试向其中Double添加一个...int

这个说法

temp.add(num);
Run Code Online (Sandbox Code Playgroud)

首先需要装箱num为其包装形式,即java.lang.Integer,然后将其添加到列表中(因为列表采用引用类型,而不是基元)。

接下来发生的事情是您尝试将 an 添加Integer到 s 的集合中Double。这是不允许的。Integer不是 的子类Double。这些是兄弟类型(它们都是 的子类Number),但Double与 不兼容Integer

根据我的理解,int num 将隐式转换为 double

当目标是double,是的,这个数字就会提升。但如果目标是Double,编译器拒绝隐式执行此操作(在将其设为 之前,它必须将您的intto装箱,并且会失败)。IntegerDouble

如果您想要快速修复,可以使用double以下类型num

for (double num: nums) {
    temp.add(num);
}
Run Code Online (Sandbox Code Playgroud)