一个java问题,求解惑
public class Arraytest
{
public static void main( String[] args)
{
String[] str1 = new String[3];
str1[0] = new String("tian");
str1[1] = new String("kong");
str1[2] = new String("nan");
String[] str2 = new String[3];
System.arraycopy( str1, 0, str2, 0, str1.length);
str2[2] = "fengyun"; //这一行
System.out.println(str1[2]);
System.out.println(str2[2]);
}
}
刚学java, 学到了数组
这个程序我是这样理解的, 见图
[img]http://dl.iteye.com/upload/attachment/0084/0039/233bb34b-ced1-32f8-8756-0f42b8cd5187.png[/img]
那么我觉得复制了之后str1[2]和str2[2]应该指向同一个位子nan那里呀,
为什么改变了 str2[2]的值,str1[1]的值没有变呢 ,求帮忙解解惑,
[size=xx-large][size=xx-large][size=x-large][size=large][size=medium]arraycopy是对数组进行浅拷贝,因此str2拷过去的是str1里面的引用,但是当给str2[2]赋值时,那时候str2[2]里面的引用改变了,然而str1[2]的引用依然是之前copy过去的引用。[/size][/size][/size][/size][/size]
arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
你的代码
System.arraycopy( str1, 0, str2, 0, str1.length);
是把str1[] 从0开始复制到str2[]0结束
str2[2]的值改变了是因为:str2[2] = "fengyun";
str1[1]没有任何操作,是不会变的
[quote]复制了之后,str1[2]和str2[2]指向同一个引用[/quote]
不是指向同个引用,是两个引用指向同个String。
str2[2] = "fengyun";
这句,只是把str2中引用指向了新的String。所以str1的没有变化。