public class Test { String change(String a){
 a=new String("abc");
                 return a;
} public static void main(String[] args) {
Test t=new Test();
String s=new String("ddd");
t.change(s);//1
System.out.println(s);//1
        //System.out.println(t.change(b));//2
}
}
输出的是ddd
但是如果1改为2那结果就是变成:
abc
大家讨论啊.挺有趣的,高手谈谈自己的意见啊.

解决方案 »

  1.   

    晕~~~~~~~~~这不是很明显吗?
    String s=new String("ddd");
    System.out.println(s);
    s的值就是ddd啊System.out.println(t.change(b));b应该是s吧?虽然不起作用
    a=new String("abc");  a的值已经是abc了。
    return a;  
    所以输出a当然是abc了
      

  2.   

    很简单,你如果能把这个程序的每一句在内存中运行的画出来的话,你就一目了然了,,public class Test { String change(String a){
     a=new String("abc");
                     return a;
    } public static void main(String[] args) {
    Test t=new Test();
    String s=new String("ddd");//s = ddd;
    t.change(s);//1调用方法完成之后,方法返回abc, 但是s还是为ddd
    System.out.println(s);//1
            //System.out.println(t.change(b));//2直接打印出方法的返回值,abc
    }
    }
      

  3.   

    java 中的方法是按值传递的
      

  4.   

    这个s的值从头到尾都没有变了,所以s还是s了
      

  5.   

    zhj92lxs() :大哥,人家现在已经是一头的雾水,你还误导他.很振振有辞的样子.....
    哎~~~
    rain_cn(rain):就象这位同志说的,的确是很简单的问题.前提是他要知道JAVA对于对象是按引用传参数啊,呵呵还有,System.out.println(t.change(b));b是不是应该写成s?
      

  6.   

    public class Test {String change(String a){
    a=new String("abc");
    return a;
    }public static void main(String[] args) {
    Test t=new Test();
    String s=new String("ddd");
    t.change(s);//在这你没有获取值,当然不会改变,而你在change中,a是一个新对象了,不是原来你传进去的a了  a=new String("abc");
    System.out.println(s);//1
    //System.out.println(t.change(b));//这句就相当于String tmp=t.change(s);System.out.println(s);
    }我刚写了这方面的一些东西,有兴趣可以看看
    http://blog.csdn.net/infon/archive/2007/06/01/1633983.aspx
    }
      

  7.   

    String s=new String("ddd");  ->定义了一个引用s,指向一个String对象String change(String a){    ->这里定义了一个新的引用at.change(s);          ->这里传递的是"引用"s,让a指向了sa=new String("abc");           ->然后你改变了a的指向,但并没有改变s的指向System.out.println(s);     ->虽然change方法返回了a,但你并没有用s去接收,打印的当然是s原本就指向的对象String("ddd")System.out.println(t.change(b)) ->这个就好理解了,打印的是change方法的返回值
      

  8.   

    呵呵,这个似乎跟string没啥关系。
    跟参数和返回值有关。
      

  9.   

    如果把“t.change(s)”改成“s=t.change(s)”结果就一样了。
      

  10.   

    “httpftp(我不是坏小孩儿) ”解释得很清楚。