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
提交
取消