日期:2014-05-20  浏览次数:20723 次

关于ArrayList和数组的疑惑,求解答。
Java code

double[] d={3,6,45,2,34,12,56,87,5,11};
double[] c=d;
Arrays.sort(c);
System.out.println(d[0]);


这个段输出什么?
Java code

ArrayList<String> l1 =new ArrayList<String>();
l1.add("abc");
l1.add("bcd");
l1.add("cde");
l1.add("def");
l1.add("efg");
ArrayList<String> l2 = l1;
l2.remove(1);
System.out.println(l1.get(1));


这段又输出什么?
相信答案很简单就能得到,可是谁能解释下为什么会有这样的输出结果呢?疑惑了几天,找了点资料也没弄明白,还请大牛们给讲解下。

------解决方案--------------------
1. 2
2. cde
同一个意思 对象是直接赋予另一个对象 指向同一个地址
2者基本没区别

------解决方案--------------------
引用d,c指向同一个对象; l1,l2指向同一个对象。不同的引用对同一个对象进行操作。
你说的clone()方法,如果是生成另外一个数据一样的对象,那么底层的实现也是一个一个的赋值吧,与你手动循环赋值没什么差,,
------解决方案--------------------
理解好变量和对象就能明白了
c和d都是变量,它们都指向一个相同的数组对象
sort(c)是把c指向的数组对象排序,因为d也指向该对象,通过d来获取数组对象的元素和c是一样的
List的道理一样
如果要做数组拷贝,可以用LS说的Arrays.copyOf();也可以用System.arraycopy()
for example
int[] a = {1,2,3};
int[] b = new int[a.length];
System.arraycopy(a, 0, b, 0, a.length);