package changXiang;public class StringTest { /**
* @param args
*/ public void change(String str, char ch[]) {
str = "test_ok";
ch[0] = 'g';
} public static void main(String[] args) {
// TODO Auto-generated method stub
String str = new String("good");
char[] ch = { 'a', 'b', 'c' };
StringTest st=new StringTest();
st.change(str, ch);
System.out.println(str);
for(int i=0;i<ch.length;i++){
System.out.print(ch[i]);
}
}}
* @param args
*/ public void change(String str, char ch[]) {
str = "test_ok";
ch[0] = 'g';
} public static void main(String[] args) {
// TODO Auto-generated method stub
String str = new String("good");
char[] ch = { 'a', 'b', 'c' };
StringTest st=new StringTest();
st.change(str, ch);
System.out.println(str);
for(int i=0;i<ch.length;i++){
System.out.print(ch[i]);
}
}}
str = "test_ok ";
ch[0] = 'g ';
}
这里面,str是参数,是局部变量,他的值的改变和调用方法(main方法)没有关系.
ch是数组,ch[0]='g',改的是数组元素,这个会影响到main()方法中的数组.
如果是ch=new char[5];就不会影响到main()方法中的数组了.
哎,我学到现在才晓得!
http://blog.csdn.net/ZangXT/archive/2009/05/19/4201979.aspx
2.当把str传给change方法时,jvm复制了一个str变量的引用B传给change方法,这个引用B也指向地址A,
3.在你的change方法中,str = "test_ok ";把引用B的指向改变了,引用B不再指向地址A,但main中的str变量还是指向地址A的,这就是输出good的原因。第二个数组的问题
1.main方法中定义了数组ch,指向内存中的一个地址C,存放着字符数组(简单起见,姑且这么说!)
2.当把ch传给change方法时,jvm复制了一个ch数组的引用D传给change方法,这个引用D也指向地址C,
3.在你的change方法中,ch[0] = 'g ';把地址C中的内容改变了,而main终的ch数组还是指向地址C,所以打印出gbc
4,如果在change方法中用ch = new char[]{XXXXXXX},那就把引用D的指向改了,不再指向地址C了,而main中的ch数组还是指向地址C,所以打印的时候会不变。还是abc
希望有所帮助!!!