Arrays.asList().contains()在Double vs double数组上

4J4*_*J41 0 java arrays

我有一个双阵列doubleArray1.我尝试了Arrays.asList().contains()如下所示的操作

double doubleArray1 [] = {1D,2D,3D};
if(Arrays.asList(doubleArray1).contains(1D)) {
    System.out.println("hello-1");
}
Run Code Online (Sandbox Code Playgroud)

它不打印任何东西.然后我把它变成了一个Double数组

Double doubleArray1 [] = {1D,2D,3D};        
if(Arrays.asList(doubleArray1).contains(1D)) {
    System.out.println("hello-1");
}
Run Code Online (Sandbox Code Playgroud)

它打印hello-1.

有人能解释为什么会有这种差异

Jon*_*eet 8

你的第一次调用Arrays.asList实际上是返回一个List<double[]>- 它是自动装箱参数,因为a double[]不是T[]......泛型不允许原始类型作为类型参数.

如果要将a转换double[]为a List<Double>,则需要手动执行或使用第三方库执行此操作.例如:

public List<Double> toList(double[] doubles) {
    List<Double> list = new ArrayList<>(doubles.length);
    for (double x : doubles) {
        list.add(x);
    }
    return list;
}
Run Code Online (Sandbox Code Playgroud)

请注意,与Arrays.asList数组的任何后续更改不会反映在列表中,反之亦然 - 它是副本,而不是视图.