日期:2014-05-20  浏览次数:20771 次

初学者 一个问题请教 十分感谢
public class test  {
static void change(String s){
s= "haha";
}
public static void main(String args[]){
String s = "wawa";
change(s);
System.out.println(s);
}
为什么最后输出不是haha啊 我不是都给他换了么
------解决方案--------------------
static void change(String s){
s= "haha";
}
public static void main(String args[]){
String s = "wawa";
change(s);
System.out.println(s);
}

你这里相当于对main里的s啥也没做,怎么可能变?change里的s只是一个形参,main里的s才是实参。
------解决方案--------------------
然后开始改代码

楼主的原始示例:

public class test  {
    static void change(String s){
        s= "haha";
    }
    public static void main(String args[]){
        String s = "wawa";
        change(s);
        System.out.println(s);
    }
}


在CSDN论坛中,可以使用下面的形式包裹代码,以让代码用相应语言的颜色高亮显示
下划线得自己去除,代码写在java和code间的那两个中括号之间
_[_c_o_d_e_=_j_a_v_a_]_[_/_c_o_d_e_]_
------解决方案--------------------
形参和实参是不同的变量,他们在内存中位于不同的位置,形参将实参的内容复制一份,在该函数运行结束的时候形参被释放,而实参内容不会改变。

public class test  {
static void change(String 形参){
形参 = "haha";
}
public static void main(String args[]){
String 实参 = "wawa";
change(实参);
在执行到这里的时候,是形参将实参复制一份,形成了《实参的复制》,然后《实参的复制》赋值为haha,在这个函数调用完成以后,《实参的复制》这个东西就被杀掉了,而原来的《实参》根本没有发生变化。
System.out.println(s);
}