① 咨詢java高手,對象數組作為方法參數時的引用傳遞的問題
方法一其實也是按引用傳遞,但是千萬千萬要注意,你要修改的是「對象的值」,而不是「對象引用的值」。形參和實參對應的是對象的引用地址,所以這句寫得很有問題: str1=str2;
你這里是試圖將str1的值用str2代替, 但是這里的str1是形參,當外面傳入了一個實參的對象引用是,你只是將內部的形參的引用改掉了,而沒有修改實參的內容...這樣在內部是把str1,str2對調了,但是外部實參的對象引用沒有變,還是原來的值。
如果要把該方法生效,可以修改方法1如下:
public void SwapString1(StringBuffer str1, StringBuffer str2) {
StringBuffer str3 = new StringBuffer();
str3.append(str1.toString());
str1.replace(0, str2.toString().length(), str2.toString());
str2.replace(0, str3.toString().length(), str3.toString());
}
str1=str2;
② Java 為什麼字元數組名無法作為引用來傳遞
因為你在 deleteRepeats方法中 charArr=str.toCharArray();這一步進行的時候,他根本不是在原有數組上進行修改,而是將方法內的局部變數charArr指向了一個數組,這個數組是toCharArray()生成的。而原有的數組自然是不變。
誤區1.你以為charArr是一個對象,其實charArr只是一個引用。charArr=str.toCharArray();改變的是引用,沒有改變引用指向的對象。
=運算符,只改變了引用,沒有改變任何對象,原數組沒有改變,新數組也不是=運算符生成的。
誤區2.你以為方法內的charArr和main中的charArr是一個引用,其實他們是兩個引用只不過,一開始指向一個數組,charArr=str.toCharArray();執行過之後,改變了deleteRepeats方法charArr引用。 使其指向了一個新數組。