日期:2014-05-19  浏览次数:20655 次

一个传值的小问题,希望来个高手解决下,帮下小弟!

public class B {

String str=new String("abc");
char p[]={'a','b'};

public void change(B b){
b.str="test";
b.p[0]='g';
}
public void change(String str,char p[]){
str="str";
p[0]='k';
}
public static void main(String[] args) {
B b=new B();
b.change(b);
System.out.println(b.str+"--"+b.p[0]);
b.change(b.str, b.p);
System.out.println(b.str+"--"+b.p[0]);
}
}
结果为 :
test--g
test--k
求解释!

------解决方案--------------------
当调用change(B b)时,str的值该为了test
当调用change(String str,char p[])时,只是传了一个String的引用,成员变量str的值不改变
而你输出的是b.str,所以是test
char[]p随着你值的改变而改变
------解决方案--------------------
String 在java中的声明是 final 的,所以无法改变它的值,我们所看到的改变只是修改了 String对象的引用。
public void change(String str,char p[]){
 str="str";
 p[0]='k';
}

str="str" 只是改变了str(参数里申明的str)这个String对象的引用,并没有改变传进来的String对象的值