List<T>,List,List<Object&gt的区别 转自《Easy Coding》

package chapter6;
 
import java.util.ArrayList;
import java.util.List;
 
public class ListNoGeneric {
    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
        // 段落一
        List a1 = new ArrayList();
        a1.add(new Object());
        a1.add(new Integer(1));
        a1.add(new String("a1"));
 
        // 如果将 a1 改变成List<Object> 那么段落三会编译异常
        // List<Object> a1 = new ArrayList();
        // a1.add(new Object());
        // a1.add(new Integer(1));
        // a1.add(new String("a1"));
 
        // 段落二 完美运行
        List<Object> a2 = a1;
        a2.add(new Object());
        a2.add(new Integer(2));
        a2.add(new String("a2"));
 
        // 段落三
        List<Integer> a3 = a1;
        a3.add(3);
        // 编译异常 因为添加了泛型约束,所以添加Intger以外的类型数据会异常
        // a3.add(new Object());
        // a3.add(new String("a2"));
        
        // 段落四 
        /* 
           可以擦除与删除
           不能使用add(Object o) 方法添加
           可以用list.add(0, null) 添加数据(只能为添加null)
           可以用list.addAll(a1) 来添加一个list。
         */
        // List<?> a4 = a1;
        // a1.remove(0);
        // a4.clear();
        // a4.add(new String("aaaaaaaaaaaaa"));
        
        //引用类型不解释
        // System.out.println(a1.size());
    }
}
  • List<T> 定义了数据类型约束,可以进行取值赋值操作,取值的时候用传入的数据类型接受就可以了。
  • List<?> 没有明确的定义数据类型,不可以写入值,只能进行取值、clear、remove操作,取出后全部强转为Object类型。一般用来作为参数接受外部的集合,或者返回一个不知道具体类型元素的集合。
  • List<Object> List 两个用起来没啥子差别,但是在将自己赋值给另一个的时候就要注意了。例如:
List l1 = new ArrayList();
l1.add("我欲乘风破浪");
//在运行的时候才会抛出异常
//java.lang.String cannot be cast to java.lang.Integer
List<Integer> l2 = l1;
 
List<Object> l3 = new ArrayList();
l1.add("我欲乘风破浪");
// 在编译的时候就会抛出异常
List<Integer> l4 = l3;

大概就是这样,有什么问题欢迎补充。 

原文:https://blog.csdn.net/qq_38244984/article/details/84729563

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值