A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 姜佳文 中级黑马   /  2014-8-5 20:42  /  1068 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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”??

4 个回复

倒序浏览
调用了函数 changeStringBuffer(n),函数进栈之后所属栈区又创建了一个字符串缓冲区对象的值赋值给s,等方法一出栈,打印的还是主函数里面的n,就是字符串缓冲区里面的字符串。
回复 使用道具 举报
额……我表示我技术还不达标…………
回复 使用道具 举报
你定义了n=”123“之后,把它作为参数传到了方法 changeStringBuffer()中,只是用了一下n而已,相当于把n复制一份传到changeStringBuffer()中,并没有对n进行其他修改操作啊,当然还是原值。如果在changeStringBuffer()中写一个输出s的语句再调用它的话,这时会是”456“。
回复 使用道具 举报
  你只是调用方法运算,修改的是你方法里n的值, 并没有修改主函数里面n的值,在主函数里当然还是123
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马