亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一個java問題,求解惑

一個java問題,求解惑

長風秋雁 2019-03-29 18:19:18
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過去的引用。

查看完整回答
反對 回復 2019-04-28
?
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]沒有任何操作,是不會變的


查看完整回答
反對 回復 2019-04-28
?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

復制了之后,str1[2]和str2[2]指向同一個引用

不是指向同個引用,是兩個引用指向同個String。

str2[2] = "fengyun";

這句,只是把str2中引用指向了新的String。所以str1的沒有變化。


查看完整回答
反對 回復 2019-04-28
  • 3 回答
  • 0 關注
  • 480 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號