回顾两个输出的最后两行为什么不同?我对计划1感到满意
计划1
public static void main(String[] args)
{
ArrayList al = new ArrayList();
al.add(10);
al.add(20);
al.add(30);
System.out.println(al);
System.out.println("-----------------------------------");
al.addAll(2, al);
System.out.println("-----------------------------------");
System.out.println(al);
System.out.println(al.get(2).getClass());
}
Output :
[10, 20, 30]
-----------------------------------
-----------------------------------
**[10, 20, 10, 20, 30, 30]
class java.lang.Integer**
Run Code Online (Sandbox Code Playgroud)
我对程序2输出不满意为什么在打印arraylist时输出不同?为什么"java.util.ArrayList"是prog 2的最后一行输出,但是prog1的"java.lang.Integer"
计划2
public static void main(String[] args)
{
ArrayList al = new ArrayList();
al.add(10);
al.add(20);
al.add(30);
System.out.println(al);
System.out.println("-----------------------------------");
al.add(2,al);
al.add(8);
al.add(2);
al.add(4);
al.add(1);
System.out.println("-----------------------------------");
System.out.println(al);
System.out.println(al.get(2).getClass());
}
Output :
[10, 20, 30]
-----------------------------------
-----------------------------------
[10, 20, (this Collection), 30, 8, 2, 4, 1]
class java.util.ArrayList
Run Code Online (Sandbox Code Playgroud)
相反的al.add(2, al);,你几乎肯定希望al.addAll(2, al);,这将增加该内容的al(因为它代表在此之前,方法调用完成)来al.
目前,你只是ArrayList在列表中添加一个对象,并且ArrayList由于缺少通用参数(不可取!),因为你可以包含任何旧东西,所以编译并运行得很好.
您遇到了这个问题,因为您使用的是ArrayList没有任何通用参数的泛型.如果你明确使用ArrayList<Integer>,那么那条线就不会编译.只有传统的向后兼容性原因才支持在没有这些参数的情况下使用它,应该避免使用它.
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |