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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hmyuanqi 中级黑马   /  2014-8-16 17:00  /  1165 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

       ArrayList arr = new ArrayList<Integer>();
         arr.add("asd");  

         ArrayList<Integer> arr1 = new ArrayList();
//       arr1.add("str");    //只能放integer
         
         ArrayList<Integer> arr2 = new ArrayList<Integer>();
  //       arr2.add("str");    //只能放integer
         
         System.out.println(arr1);  //asd
对于这三个加了泛型的对象的写法,为什么第一中写法可以加String类型的?并且输出无错误,而第二种第三种是不能加String的,第一种和后面两种有什么不同吗?

2 个回复

倒序浏览
泛型检查发生在编译期,编译器是不知道new出来的是啥玩意儿的,只看你声明的引用变量不带泛型,那就什么都让你装。如果看到你声明的引用变量带泛型,那就只让你装泛型指定的元素
回复 使用道具 举报
楼上正解, 泛型只是把安全问题由运行时期,弄到了编译时期.  而等编译通过后, 就不关他的事了,张孝祥老师的视频里有讲的.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马