List、List、List<?>

  • List
  • List<Object>
  • List<?>
  • demo

List

1、声明的List集合对其 所指向的集合对象(就是赋值的集合对象)的限制:无泛型限制,并且无视指向的集合对象的泛型,直接当成List处理(泛型擦除)

//泛型参数Integer对集合list无任何影响,list直接无视Integer
//list的泛型类型为默认的Object(泛型擦除)
List list = new ArrayList<Integer>();
list.add("11");

2、对用List声明的集合进行添加的元素的限制:无类型限制,也就是只要是Object就行,任何类型都可以添加

List a1 = new ArrayList();
a1.add(new Object());
a1.add(new Integer(1));
a1.add(1L);
a1.add(new String("a1"));

3、对用List声明的集合进行添加的元素的限制:无类型限制,也就是只要是Object就行,任何类型都可以添加

List

1、声明的List 集合对其 所指向的集合对象(就是赋值的集合对象)的限制:泛型必须是Object,即必须是ArrayList

2、对用List 声明的集合进行添加的元素的限制:无类型限制,也就是只要是Object就行

List<Object> a2 = new ArrayList();
a2.add(new Object());
a2.add(new Integer(2));
a2.add(new String("a2"));

3、虽然Integer对象是Object对象,但是 ArrayList对象并不是 ArrayList对象。

List<?>

1、声明的List<?> 集合对其 所指向的集合对象(就是赋值的集合对象)的限制:无泛型限制,因为?(占位符)代表一个不确定类型(并不是代表Object),即能代表所有类型 2、对用List<?> 声明的集合进行添加的元素的限制:不可对其添加任何类型元素,因为在编译阶段无法知道其准确的泛型类型,随意add()方法无法通过编译检查。

3、程序在编译阶段无法得知list的泛型类型,也不会把添加的元素当成Object处理,所以无法添加元素,但是可以让它指向一个已经有含元素的集合。
4、List<?>在没有赋值以前,可以接受任何类型的集合赋值。允许删除,不允许添加。

List<String> a1 = new ArrayList<>();
a1.add("11");
a1.add("22");
List<?> a4 = a1;
a4.remove(0);
a4.clear();
a4.add(null);

demo

public class Test {public static void main(String[] args) throws Exception {// 第一段:不使用泛型的方式List a1 = new ArrayList();a1.add(new Object());a1.add(new Integer(1));a1.add(new String("a1"));// 第二段:把a1赋值给List<Object>类型的a2,看似a2与a1没有区别List<Object> a2 = a1;a2.add(new Object());a2.add(new Integer(2));a2.add(new String("a2"));// 但是如果尝试把一个带有其它类型泛型的b2赋值给a2,则会编译报错List<String> b2 = new ArrayList<>();// 编译报错,这也是List与List<Object>的区别a2 = b2;// 第三段:把a1赋值给List<Integer>类型的a3,赋值过程没有编译报错,主要为了向前兼容(泛型jdk1.5之后才出现)List<Integer> a3 = a1;a3.add(new Integer(3));// java.lang.ClassCastException: java.lang.Object cannot be cast to java.lang.IntegerInteger integer = a3.get(0);// 编译报错,不允许add非Integer类型a3.add(new Object());a3.add(new String("a3"));// 第四段:把a1赋值给List<?>类型的a4List<?> a4 = a1;a4.remove(0);a4.clear();a4.add(null);// 编译出错,不允许add非null的数据a4.add(new Object());}

List、List<Object>、List<?>相关推荐

  1. asp.net的aspx页面<% %>、<%@ %>、<%# %>、<%= %>、<%$ %>的用法

    1. <%--exegesics--%> 注释 相当于<!----> 2. <% code%> 绑定后台代码块: //相当于写在后台的可执行代码 <form ...

  2. 运算符“||”与“|”,“”和“”的区别 (附带各类位运算符号详解(、|、^、~、<<、>>、>>>)

    区别一: 定义不同: || 和 | 都是表示"或",区别是||只要满足第一个条件,后面的条件就不再判断,而|要对所有的条件进行判断. 区别二: 与操作和或操作的区别 (1)在Jav ...

  3. 位运算(<<移位>>、与、或|、反~、异或^)及运用【求子集】【判相等】...(各类问题持续更新)

    概念不用多说,上图(懒得自己做,图源菜鸟教程) 位运算规律 位运算高级操作 目录 一.与&的性质及运用 1.与的性质 2.输出一个正数二进制表示中1的个数 3.用一条语句判断一个整数是不是2的 ...

  4. 封装自定义的redis切库工具类ByteArrayRedisTemplate,读取byte数组反序列化成List<Object>

    封装自定义的redis切库工具类ByteArrayRedisTemplate,读取byte数组反序列化成List<Object>(使用lettuce连接池) 代码环境 框架:springb ...

  5. 【Object类、日期、StringBuilder】

    [Object类.常用API] 第一章 Object类 1.1 概述 java.lang.Object类是Java语言中的根类,即所有类的父类.它中描述的所有方法子类都可以使用.在对象实例化的时候,最 ...

  6. Object类、常用API

    # [Object类.常用API] ## 主要内容 * Object类 * Date类 * DateFormat类 * Calendar类 * System类 * StringBuilder类 * 包 ...

  7. revit2019 导出obj_revit、3dmax导出object文件软件操作说明.doc

    revit.3dmax导出object文件操作说明 目录 一.Revit导出Object文件2 二.3DMAX 导出Object文件2 三.3DMAX文件的材质赋予5 四.Object文件的三维位置调 ...

  8. intent几种传值数组、对象、集合(Array,Object,List)

    1.Array private ArrayList<String> checkList=new ArrayList<String>();Intent intent=new In ...

  9. 一、Java 面向对象高级——Object类、常用API

    day01[Object类.常用API] 主要内容 Object类 Date类 DateFormat类 Calendar类 System类 StringBuilder类 包装类 教学目标 -[ ] 能 ...

  10. Java面试知识点:Object类、Math类、BigDecimal类、自动装箱、拆箱

    问题:Java面试知识点:Object类.BigDecimal类.自动装箱.拆箱 答案: 1.Object类: 代码如下: package com.xy;/*** @ProjectName: day0 ...

最新文章

  1. Python使用PIL将png图片转化为jpg图片
  2. linux之pmap命令
  3. ObjectT5:在线随机森林-Multi-Forest-A chameleon in track in
  4. 让ERP downloaded product的description能够在CRM被修改
  5. 大三了,计算机专业学生的困惑。 [转]
  6. oracle一体机flash卡,PCIe Flash卡设备的测试
  7. 移动硬盘WINPE启动盘安装方法图解
  8. Centos7安装mongodb
  9. 卡巴斯基防病毒软件授权文件添加
  10. WEB前端基础-HTML CSS总结.xmind思维导图
  11. uniapp中如何使用微信SDK
  12. mysql印度时区_【工作记录】JDBC连接MySQL,跨时区调查CST转Asia/Shangha
  13. 斗罗大陆手游服务器维护,05.19《斗罗大陆:武魂觉醒》停服维护公告(修罗1-7服先行服)...
  14. 求助-强化学习基础-K-摇臂老虎机Python
  15. alios下载_AliOS Studio开源工具|AliOS Cloud App集成开发环境(AliOS Studio)下载 v1.2.1 官方Windows版 - 比克尔下载...
  16. 5G网络的关键技术及特点,面临的挑战!
  17. SLIC 超像素分割详解(三):应用
  18. 破天荒!苹果终于对 MacBook Air 大更新,还有全新 iPad Pro 和 Mac mini
  19. 权威SSL证书的CA机构有哪些
  20. 计算机专业英语课程标准,502057《计算机专业英语》课程标准

热门文章

  1. 2021 广工 Anyview 数据结构第 5 章
  2. 嵌入式计算机图形学入门书籍,蹭课:嵌入式系统设计计算机图形学
  3. 《富爸爸穷爸爸》摘录
  4. 宝洁的消费者研究的方法和趋势
  5. echarts实现多个y轴
  6. 【数学建模】层次分析法
  7. 软件测试新标准ISO29119的是是非非
  8. PHPExcel的自定义导出及合并单元格
  9. Python入门练习选择题
  10. Tokenview | 区块链安全