Java程序分析题,希望有人能跟我解释一下为什么吗

分析以下代码:
Double[] array = {1, 2, 3};
ArrayList list = new ArrayList<>(Arrays.asList(array));
System.out.println(list);

A.代码正确并显示[1,2,3]。

B.代码正确并显示[1.0、2.0、3.0]。
C.代码有编译错误,因为像1这样的整数会自动转换为整数对象,但数组元素类型是Double。
D.代码有编译错误,因为asList(array)要求数组元素是对象。

我不知道选什么

选择C,Double[] array = {1, 2, 3};这里整数不能直接转换double

选c
因为Double类型数组赋的值为int类型 1,2,3
int类型1,2,3 会自动转型为double,但是不能自动转型为Double
因为Double是double的包装类
而int,double属于java基本数据类型

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/156055
  • 除此之外, 这篇博客: 面经手册 · 第7篇《ArrayList也这么多知识?一个指定位置插入就把谢飞机面晕了!》中的 1.3.2 Arrays.asList 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    你知道吗?

    • Arrays.asList 构建的集合,不能赋值给 ArrayList
    • Arrays.asList 构建的集合,不能再添加元素
    • Arrays.asList 构建的集合,不能再删除元素

    那这到底为什么呢,因为Arrays.asList构建出来的List与new ArrayList得到的List,压根就不是一个List!类关系图如下;

    小傅哥 bugstack.cn & List类关系图

    从以上的类图关系可以看到;

    1. 这两个List压根不同一个东西,而且Arrasys下的List是一个私有类,只能通过asList使用,不能单独创建。
    2. 另外还有这个ArrayList不能添加和删除,主要是因为它的实现方式,可以参考Arrays类中,这部分源码;private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, java.io.Serializable

    此外,Arrays是一个工具包,里面还有一些非常好用的方法,例如;二分查找Arrays.binarySearch、排序Arrays.sort


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^