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';
}
}
对象 数组 都是在堆内存中,变量 是在栈内存中, String str=new String("good");
char[]ch={'a','b','c'}; 这两个都保留在了堆内存中, str="test ok"; 保存在栈内存中,当花括号结束就释放内存。 ch[0]='g'; 保存在堆内存中,他把 char[]ch={'a','b','c'};地址为0的第一号元素‘a’给替换了,变成了ch={'g','b','c'}。 记住:栈内存是在方法花括号结束释放内存,堆内存随着内的加载完毕花括号才释放内存。 现在理解了吗? |