黑马程序员技术交流社区

标题: StringBuffer的问题 [打印本页]

作者: 姜佳文    时间: 2014-8-5 20:42
标题: StringBuffer的问题
public class StringTest{
    public static void changeString(String s)
    {
        s = "456";
        s = s.concat("456");
    }
     
    public static void changeStringBuffer(StringBuffer s)
    {
         
        StringBuffer t = new StringBuffer("456");
        s = t;
    }
    public static void main(String args[])
    {
        String m = "123";
        changeString(m);
        System.out.println(m);
        System.out.println("change m = " + m);
        System.out.println("m = " + m);
        StringBuffer n = new StringBuffer("123");
        changeStringBuffer(n);
        System.out.println("n = " + n);
    }
}

代码如上,为什么最后输出的不是“n=456”?而是“n=123”??
作者: zhouqun    时间: 2014-8-5 21:06
调用了函数 changeStringBuffer(n),函数进栈之后所属栈区又创建了一个字符串缓冲区对象的值赋值给s,等方法一出栈,打印的还是主函数里面的n,就是字符串缓冲区里面的字符串。
作者: 小黑子    时间: 2014-8-5 21:57
额……我表示我技术还不达标…………
作者: 依然超级赛亚人    时间: 2014-8-5 22:12
你定义了n=”123“之后,把它作为参数传到了方法 changeStringBuffer()中,只是用了一下n而已,相当于把n复制一份传到changeStringBuffer()中,并没有对n进行其他修改操作啊,当然还是原值。如果在changeStringBuffer()中写一个输出s的语句再调用它的话,这时会是”456“。
作者: 王凯路路    时间: 2014-8-5 22:23
  你只是调用方法运算,修改的是你方法里n的值, 并没有修改主函数里面n的值,在主函数里当然还是123




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2