黑马程序员技术交流社区

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

作者: 臧盼    时间: 2012-12-16 18:04
标题: StringBuffer问题
class HelloWorld{
        public static void main(String[] args) {
        StringBuffer s1=new StringBuffer("a");
        StringBuffer s2=new StringBuffer("b");

        s1.append("1");
        s2=s1;
        s2.append("2");
        System.out.println(s1+"--"+s2);
        HelloWorld t=new HelloWorld();
        t.change(s1,s2);
        System.out.print(s1+"--"+s2);
        }

public void change(StringBuffer s1,StringBuffer s2)
{
//s1=new StringBuffer("c");
s1.append("2");
s2=s1;
s2.append(s1);
}



}
结果:a12--a12     a122a122--a122a122
这个结果是怎么来的啊
作者: yuchen208    时间: 2012-12-16 18:26
首先需要确定的是s1和s2都是引用类型变量,即栈内存中的s1和s2变量指向堆内存中的对象
s1 = a1;
s2 = a


package Junit;

/**
* 结果:a12--a12 a122a122--a122a122 这个结果是怎么来的啊
*
* @author Administrator
*
*/
public class HelloWorld {
        public static void main(String[] args) {
                StringBuffer s1 = new StringBuffer("a");
                StringBuffer s2 = new StringBuffer("b");
                s1.append("1");      //s1 = a1
                s2 = s1;             //s2 = a1
                s2.append("2");      //s2 = a12    s1 = a12  因为s1和s2指向堆中同一个对象
                System.out.println(s1 + "--" + s2);   //输出结果为:a12--a12
                HelloWorld t = new HelloWorld();      //s2 = a12    s1 = a12 指向同一个对象
                t.change(s1, s2);                     //过程在下面
                System.out.print(s1 + "--" + s2);    // 结果显示: a122a122--a122a122
        }

        public void change(StringBuffer s1, StringBuffer s2) {
                // s1=new StringBuffer("c");
                s1.append("2");                   //s1 = a122
                s2 = s1;                          //s2 = a122
                s2.append(s1);                    //s2 = a122a122  s1 = s2 = a122a122
        }

}

hello.jpg (1.24 MB, 下载次数: 19)

试图

试图

作者: yuchen208    时间: 2012-12-16 18:45
是内存模型堆栈相关
作者: 李培根    时间: 2012-12-16 21:14
这个问题理解好引用数据类型赋值原理就很容易了。
引用数据类型 s2=s1,是将s1的地址值赋给s2,s1和s2指向同一个对象。




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