黑马程序员技术交流社区

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

作者: 李会成    时间: 2013-2-4 15:23
标题: StringBuffer问题
本帖最后由 张向辉 于 2013-2-6 15:17 编辑

class StringBuffertest{
public static void main(String[] args){
String str1="从来富贵不是梦";
str1=str1+"未有圣贤不读书";      //注意此str1的存储地址已发生变化
System.out.println(str1);
StringBuffer sb1=new StringBuffer("精思生智慧,");
StringBuffer sb2=sb1.append("慧可解怨!");    //注意sb1和sb2指向同一个地址
sb2.insert(6,"识可转智,");
System.out.println("sb1="+sb1);
System.out.println("sb2="+sb2);
sb1.append(Math.E);
System.out.println(sb1);
System.out.println(sb1.charAt(2));
System.out.println("sb1的长度="+sb1.length());
System.out.println("sb1的容量="+sb1.capacity());


}
}
里面的两行注释我不明白,这段代码里面的:
System.out.println("sb1="+sb1);
System.out.println("sb2="+sb2);
这两条代码为什么输出的值是一样的?课本说它们指向同一个地址是怎么回事?
作者: 鲁柯    时间: 2013-2-4 15:37
StringBuffer sb1=new StringBuffer("精思生智慧,");
StringBuffer sb2=sb1.append("慧可解怨!");    //注意sb1和sb2指向同一个地址
毕老师讲的很清楚呀,面盆理论 多精辟
StringBuffer就相当于一个面盆,你用append往面盆里再加一点东西,会产生两个面盆吗?还是同一个面盆呀,只不过里边的东西多了,面盆里的东西变了而已
作者: 刘凯    时间: 2013-2-5 02:17
楼主 注意 楼主只new了一个对象, 如楼上所说 也就是只有一个盆 sb1  和sb2 只是指向这一个盆的两个指针而已  也就是说sb1  和sb2 都指向了同一个StringBuffer 对象,
则然他们指向的地址是相同的  既然都是这一个盆里的内容,自然倒出的东西是一样的,也就是说输出结果是一样的。
作者: 陈科宇    时间: 2013-2-5 03:28
        希望我的图片说明对你有帮助,实质就是sb1和sb2我们都成为引用变量。那什么是引用变量呢。这其实就是C语言里的指针概念。它所占内存并不存放实际的值,而是存放另外一个变量的地址,存放的变量的地址中装载了sb1的实际的字符串内容。你采用了sb2=sb1的模式,眼下之一就是让sb2和sb1指向堆内存里的同一个字符串对象。

未命名.JPG (19.84 KB, 下载次数: 20)

堆内存与栈内存示例

堆内存与栈内存示例

作者: 李培根    时间: 2013-2-18 11:28
请勿复制他人帖子,技术分不是入学的门槛而是为了帮助大家学习而存在的。

请勿再次发此类帖子了!

此贴就关闭了。此后如有再次发现直接封禁处理,请看到此贴的会员也加以注意。





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