Java集合中List<T>和List<?>与List<Object>的区别

        在Java中List<T>、List<?>、List<Object>这三者都可以容纳所有的对象,但三者有何联系区别呢?

一、类类型的区别

        List<T>表示的是List集合中的元素都为T类型,具体类型在运行期决定;List<?>表示的是任意类型,与List<T>类似,而List<Object>则表示List集合中的所有元素为Object类型,因为Object是所有类的父类,所以List<Object>也可以容纳所有的类类型,从字面意义上分析,List<T>更符合习惯:编码者知道它是某一个类型,只是在运行期才确定而已。


二、集合读写操作的区别

        List<T>可以进行诸如add、remove等操作,因为它的类型是固定的T类型,在编码期不需要进行任何的转型操作。

        List<?>是只读类型的,不能进行增加、修改操作,因为编译器不知道List中容纳的是什么类型的元素,也就无法校验类型是否安全了,而且List<?>读取出的元素都是Object类型的,需要主动转型,所以它经常用于泛型方法的返回值。注意,List<?>虽然无法增加、修改元素,但是却可以删除元素,比如执行remove、clear等方法,那是因为它的删除动作与泛型类型无关。

三、使用优先级的区别

        List<T>、List<?>、List<Object>这三者都可以容纳所有的对象,但根据三者的特性,一般Java开发规范使用的顺序应该是首选List<T>,次之List<?>,最后选择List<Object> 。

--------------------------------------

版权声明:本文为【PythonJsGo】博主的原创文章,同步在微信【猿小猴子】公众号平台,转载请附上原文出处链接及本声明。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值