A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hmyuanqi 中级黑马   /  2014-8-18 14:53  /  1245 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

   ArrayList arr = new ArrayList<Integer>();
             arr.add("asd");  
为什么可以放S听类型的对象?他不是指向ArrayList<Integer>()?
这里对象加入泛型只能放Integer,但是运行时也没错误,代表String也放进去了。这跟没加泛型有什么区别|??

             ArrayList<Integer> arr1 = new ArrayList();
arr1只能存放Integer及其子类对象,上面的代码和ArrayList<Integer> arr1 = new ArrayList<Integer>();有什么区别?

评分

参与人数 1黑马币 +4 收起 理由
xkfxm + 4

查看全部评分

7 个回复

倒序浏览
同求回复~
回复 使用道具 举报
ArrayList<Integer> arr=new ArrayList<Iterator>();
回复 使用道具 举报
       这样子说:ArrayList list =new ArrayList<Integer>();只是定义了一个ArrayList的集合,但是实际上你并未确定对这个list集合中究竟要存储什么类型的数据,你其实就只是单纯的申明了一个list。你当然可以往这个集合里面放String类型的数据了,而后面的那种ArrayList<Integer> list =new ArrayList();申明方式你就已经在定义的时候明确表示了这个集合中装的元素只能是Integer类型的,ArrayList list =new ArrayList();这句话左边是你的申明,右边才是你的申明指向的实体对象,你的实体对象是装Integer类型的ArrayList集合,但是你还是ArrayList吧,所以我左边的lsit引用就能使用你,通过你这个对象实体产生的数据我都能接受,但是左边你又没定义你的list中必须装Integer,那么我往里面装String也是可以的啊。
       记好,一个集合中是能够存储各种数据类型的。我们之所以在申明这个集合时加上泛型,其中一个非常重要的目的就是为了避免在使用这个集合中的元素时进行强制转型的麻烦。
      
回复 使用道具 举报
怀念黑海岸 发表于 2014-8-18 18:35
这样子说:ArrayList list =new ArrayList();只是定义了一个ArrayList的集合,但是实际上你并未确定 ...

哦,谢谢
回复 使用道具 举报
怀念黑海岸 发表于 2014-8-18 18:35
这样子说:ArrayList list =new ArrayList();只是定义了一个ArrayList的集合,但是实际上你并未确定 ...

你好,请问你是报44期安卓的女生么
回复 使用道具 举报
hmyuanqi 发表于 2014-8-19 10:39
你好,请问你是报44期安卓的女生么

我不是北京班的,我在深圳,我46期的。
回复 使用道具 举报
怀念黑海岸 发表于 2014-8-19 12:03
我不是北京班的,我在深圳,我46期的。

还有我是男的,不是女生。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马