我阅读了很多文章,但我无法理解这两行之间的区别:
ArrayList<String> list = new ArrayList();
ArrayList<String> list = new ArrayList<String>();
唯一的区别是我看到第一行触发了“未经检查的分配”警告。
答案 0 :(得分:3)
使用未选中的作业,您可以添加不正确类型的对象。什么会导致RuntimeException。例如。你可以将整数添加到列表中。对于类型,这是不可能的。
ArrayList<String> list = new ArrayList(Arrays.asList(1));
ArrayList<String> list = new ArrayList<String>(Arrays.asList(1));
第一个被接受,第二个出现编译错误。
答案 1 :(得分:1)
你可以制作一份原始清单。
List list = new ArrayList();
没关系,你现在有了一个原始列表,可以放入任何对象。如果要将该列表分配给键入的版本,则将进行未选中的分配。
List<String> strings = list;
这是因为,列表中的内容从未被检查为字符串。