Collection.toArray不同类型存到数组中?

实验发现,不同类型可以存到数组中,结果和 “数组类型一致” 相矛盾,这如何解释呢?

package zhc;
import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
                                                                                                                                              
public class Entry {                                                                                                                          
    public static void main(String []args) {                                                                                                  
                List list = new ArrayList();                                                                                                  
                for (int i = 0; i < 10; i++) {                                                                                                
                        if(i%2 == 0){                                                                                                         
                                list.add(i);                                                                                                  
                        }else{                                                                                                                
                                list.add(i+"字符串");                                                                                         
                        }
                }
       System.out.println(list);

                Object[] array = list.toArray();
                System.out.println(Arrays.toString(array) );
    }
}
阅读 1.5k
2 个回答
实验发现,不同类型可以存到数组中

但是 IntegerString 都是 Object,同时作为 Object 的时候类型是相同的

这涉及到继承的概念。

例如,下面这段代码完全正确

    static class A{}
    static class B extends A{}
    static class C extends A{}

    public static void main(String[] argv) {
        List<A> list = new ArrayList<>();
        list.add(new B());
        list.add(new C());
    }

回到你的代码上来,java 中有一个概念,所有的对象类型,全部继承 Object
List list = new ArrayList();
等同于
List<Object> list = new ArrayList<>();

如果基本类型没有继承的概念,比如 intdouble 等,会转换为包装类型 IntegerDouble,同样也是继承了 Object

因此这个 list 可以容纳任意对象。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题