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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 臧盼 中级黑马   /  2012-12-16 18:04  /  1323 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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
这个结果是怎么来的啊

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
首先需要确定的是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)

试图

试图

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
是内存模型堆栈相关
回复 使用道具 举报
李培根 来自手机 金牌黑马 2012-12-16 21:14:18
板凳
这个问题理解好引用数据类型赋值原理就很容易了。
引用数据类型 s2=s1,是将s1的地址值赋给s2,s1和s2指向同一个对象。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马