List、List<object>、List<?>三者的区别

public class Demo01 {
    public static void main(String[] args) {
        // 第一段:泛型出现之前的集合定义方式
        List a1 = new ArrayList();
        a1.add(new Object());
        a1.add(new Integer(111));
        a1.add(new String("hello a1"));

        // 第二段:把a1引用赋值给a2,注意a2与a1的区别是增加了泛型限制<Object>
        List<Object> a2 = a1;
        a2.add(new Object());
        a2.add(new Integer(222));
        a2.add(new String("hello a2"));

        // 第三段:把a1引用赋值给a3,注意a3与a1的区别是增加了泛型<Integer>
        List<Integer> a3 = a1;
        a3.add(new Integer(333));
        // 以下两行编译报错,不允许增加非Integer类型进入集合
       // a3.add(new Object());
       // a3.add(new String("hello a3"))

        // 第四段:把a1引用赋值给a4、a1与a4的区别是增加了通配符
        List<?> a4 = a1;
        // 以下编译报错,不允许增加任何元素
        //  a4.add(new Object());
        //  a4.add("111");
        //  a4.add(111)
        System.out.println("=======" + a4 );
        // 允许删除和清除元素
        a1.remove(0);
        a4.clear();
    }
}
原文地址:https://www.cnblogs.com/nastu/p/15193789.html