java方法中只有值傳遞,沒有引用傳遞

weixin_34119545發表於2016-10-11
public class Example {
String testString = new String("good");
char[] testCharArray = {'a','b','c'};

public static void main(String[] args){
Example ex = new Example();
ex.change(ex.testString,ex.testCharArray);
System.out.println(ex.testString);
System.out.println(ex.testCharArray);
}

public void change(String testString,char[] testCharArray){
testString = "hhhhhh";
testCharArray[0] = 'w';
}
}
 
這段程式碼最後輸出的是什麼?
考慮之後給出你的答案。
good
wbc

 

首先要明白的java的方法傳遞的究竟是什麼?

對於基本型別,傳遞的是基本型別的值,而對於引用型別傳遞的是地址

所以無論是什麼,傳遞的都是值,因為你可以把地址理解成9x0000這種,也是一個值。

所以傳遞的都是值。

那麼方法中什麼時候會改變原來的值,什麼時候不會呢?

1、只要是基本型別,傳遞的是值,這個值是複製了一份出來的,所以怎麼都不會改變。

2、引用型別,傳遞的是地址,如果這個地址變了,那麼原來的值肯定不變。

3、引用型別,傳遞的是地址,如果地址沒變,而改變了地址對應的物件的屬性,那麼久會改變原來的值。

 

如果還聽不明白,那麼簡單的說,只要在方法裡面把傳進來的物件重新賦值一個new的物件,那麼原來是不變得。

如同方法中的string,重新賦值了一個字串,這個時候地址以及改變了,所以原來那個不變。

而char陣列,沒有重新複製一個新的char陣列,而是把char陣列中的元素改變了,那就會改變原來的值。

 

對於記憶體的分析,下面這篇部落格特別清楚,我就不多說了。

搞懂這個真的很重要。

http://www.cnblogs.com/lixiaolun/p/4311863.html

相關文章