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數組中的元素改變了,那就會改變原來的值。
對於內存的分析,下面這篇博客特別清楚,我就不多說了。
搞懂這個真的很重要。