Server端: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, 学到了数组这个程序我是这样理解的, 见图那么我觉得复制了之后str1[2]和str2[2]应该指向同一个位子nan那里呀,为什么改变了 str2[2]的值,str1[1]的值没有变呢 ,求帮忙解解惑,
3 回答

慕婉清6462132
TA贡献1804条经验 获得超2个赞
arraycopy是对数组进行浅拷贝,因此str2拷过去的是str1里面的引用,但是当给str2[2]赋值时,那时候str2[2]里面的引用改变了,然而str1[2]的引用依然是之前copy过去的引用。

Qyouu
TA贡献1786条经验 获得超11个赞
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]没有任何操作,是不会变的

蓝山帝景
TA贡献1843条经验 获得超7个赞
复制了之后,str1[2]和str2[2]指向同一个引用
不是指向同个引用,是两个引用指向同个String。
str2[2] = "fengyun";
这句,只是把str2中引用指向了新的String。所以str1的没有变化。
添加回答
举报
0/150
提交
取消