新手求教java泛型问题

qq906907952 2017-01-25 02:22:07
public static void main(String[] args) {
ArrayList l = new ArrayList<String>();
l.add(1234);

为什么这样的代码不报错还能执行 泛型写在左边和右边和左右两边都写分别有什么区别

...全文
264 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
UsagiKnight 2017-02-01
  • 打赏
  • 举报
回复
ArrayList<String> l = new ArrayList<String>(); 1.你省略了前面的String,那么这个ArrayList其实是一个Object数组,你可以试一下,l.add(true);这句话也是可以通过的。 2.你省略了后面的String,没有多大关系。 现在我们来分析一下为什么会出现上面的两种情况: 在java虚拟机中没有泛型,就是说,这句代码在后端运行的时候,其实ArrayList数组的两个String都会被擦除,变成Object数组,但是JVM会记得前面的<>中的类型,在函数使用的时候,把Object的数据强转成<>中的类型,就是强转为String类型,从而起到ArrayList<String>的作用。 http://blog.csdn.net/quinnnorris/article/details/54666705 这个是我写的博客,一点愚见,有问题欢迎讨论
科比请留步 2017-01-25
  • 打赏
  • 举报
回复
你这样写左边默认是Object,而不是String
科比请留步 2017-01-25
  • 打赏
  • 举报
回复
正确的写法是左边写,右边不写,这是JDK1.7优化的写法,官方推荐最正确的写法
qq_30037507 2017-01-25
  • 打赏
  • 举报
回复
这是编译器决定的,1.7后编译器实现了,左边写右边就不用写
解开者 2017-01-25
  • 打赏
  • 举报
回复
只有左边写了才有意义 只有左边写,编译器会给一个警告,但能正常用 只有右边写,相当于白写 两边都写是正常情况(1.7之后,右边的参数类型可以省略:List<String> l = new ArrayList<>();)

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧