解决方案 »

  1.   

    static void change(String s){
    s= "haha";
    }
    这边传入的s是一个java栈的拷贝,然后s= "haha";把复制的s指向了另一个字符串haha,因为s只是一份拷贝,所以不影响原来的s,原来的s还是wawa
      

  2.   

    上面看错了,应该说change里的s是个参数,跟main里的s不是一个东西
      

  3.   

    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才是实参。
      

  4.   

    public class Haha {
    static String change(String s){
    s= "haha";
    return s;
    }
    public static void main(String args[]){
    String s = "wawa";
    s=change(s);
    System.out.println(s);
    }
    }
    这样就可以了
      

  5.   

    先推荐两篇文章1)JAVA  参数传递
    http://blog.sina.com.cn/s/blog_5dd380b90100bvel.html2)Java Swapping Using a Wrapper Class
    http://www.cs.utsa.edu/~wagner/CS2213/swap/swap.html
      

  6.   

    然后开始改代码楼主的原始示例: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_]_
      

  7.   

    你得先理解传值和传址。
    你在change(s);传的是s的值,所以s的值不会变。
      

  8.   

    根据推荐文章1,JAVA语言:
    从程序运行的角度来看,参数传递,只有传值,从不传递其它的东西。
    只不过值的内容有可能是数据,也有可能是一个内存地址。根据推荐文章2,可以使用“包装类”的办法实现“在方法内部改值”
    class MyString {
        private String dataMemberString;    public MyString(final String constructorString) {
            dataMemberString = constructorString;
        }    @Override
        public String toString() {
            return dataMemberString;
        }    public String getDataMemberString() {
            return dataMemberString;
        }    public void setDataMemberString(String dataMemberString) {
            this.dataMemberString = dataMemberString;
        }
    }public class test1 {    static void change(MyString s) {
            s.setDataMemberString("haha");
        }    public static void main(String[] args) {
            MyString s = new MyString("wawa");
            change(s);
            System.out.println(s);
        }}
      

  9.   

    注意,即使像第26行这样书写代码也不会修改main方法中的s的值class MyString {
        private String dataMemberString;    public MyString(final String constructorString) {
            dataMemberString = constructorString;
        }    @Override
        public String toString() {
            return dataMemberString;
        }    public String getDataMemberString() {
            return dataMemberString;
        }    public void setDataMemberString(String dataMemberString) {
            this.dataMemberString = dataMemberString;
        }
    }public class test1 {    static void change(MyString s) {
    //        s.setDataMemberString("haha");
            s = new MyString("haha");
        }    public static void main(String[] args) {
            MyString s = new MyString("wawa");
            change(s);
            System.out.println(s);
        }}理由参考推荐1
      

  10.   

    形参和实参是不同的变量,他们在内存中位于不同的位置,形参将实参的内容复制一份,在该函数运行结束的时候形参被释放,而实参内容不会改变。public class test  {
    static void change(String 形参){
    形参 = "haha";
    }
    public static void main(String args[]){
    String 实参 = "wawa";
    change(实参);
    在执行到这里的时候,是形参将实参复制一份,形成了《实参的复制》,然后《实参的复制》赋值为haha,在这个函数调用完成以后,《实参的复制》这个东西就被杀掉了,而原来的《实参》根本没有发生变化。
    System.out.println(s);
    }
      

  11.   

    [code=java_]System.out.print(谢谢大家打帮助")[/code]
      

  12.   

    System.out.print(谢谢大家打帮助")