代码1:
ArrayList arr = new ArrayList();
arr.add(3);
arr.add("ss");
Run Code Online (Sandbox Code Playgroud)
代码2:
ArrayList<Object> arr = new ArrayList<Object>();
arr.add(3);
arr.add("ss");
Run Code Online (Sandbox Code Playgroud)
代码3:
ArrayList<Object> arr = new ArrayList<Object>();
arr.add(new Integer(3));
arr.add(new String("ss"));
Run Code Online (Sandbox Code Playgroud)
所有上述三个代码都工作正常..有人可以告诉我哪个是首选的,为什么...以及为什么eclipse编译器总是在没有提到Arraylist的参数类型时发出警告..提前感谢..
Joa*_*uer 10
第一个简单的规则:永远不要使用String(String)构造函数,它绝对没用(*).
所以arr.add("ss")很好.
与3它略有不同:3是一个int文字,它不是一个对象.只有对象可以放入List.因此int需要将意志转换为Integer对象.在大多数情况下,将自动为您完成(该过程称为自动装箱).它有效地做同样的事情,Integer.valueOf(3)它可以(和会)避免建立新的Integer在某些情况下的实例.
因此,实际写入arr.add(3)是通常比使用一个更好的主意arr.add(new Integer(3)),因为它可避免建立新的Integer对象,而是重用和现有的一个.
免责声明:我在这里专注于第二和第三代码块之间的区别,并且几乎忽略了泛型部分.有关泛型的更多信息,请查看其他答案.
(*)有一些模糊的角落情况,它是有用的,但一旦你接近那些你会知道永远不会把绝对的陈述作为绝对;-)
第二个是首选:
然而,在同一列表中具有两种不同类型的对象具有一些不良的设计气味.我们需要更多的背景来谈论这个问题.
| 归档时间: |
|
| 查看次数: |
97100 次 |
| 最近记录: |