今天朋友問了一個面試題,題目如下:
public class Example{
String str=new String("good");
char[]ch={'a','b','c'};
public static void main(String args[]){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+" and ");
Sytem.out.print(ex.ch);
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='g';
}
}
執行結果為 good and gbc ,為啥 str沒改變而ch 改變了呢??
下面將粗略畫一下程序執行過程中JVM中內存情況,來解釋為什麼為啥 str沒改變而ch 改變了
執行Example ex=new Example(); 後沒有執行方法change之前的內存情況如圖:
在執行ex.change(ex.str,ex.ch)後,沒有執行 str="test ok"之前時內存情況如下:
在執行完change方法中ch[0]='g'後,方法沒有退出之前,內存情況如下:
原因已經很明顯了。
以上都是個人對程序的理解,如有不對之處請輕噴。。。。