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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小石头39910 中级黑马   /  2013-5-30 19:06  /  2245 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小石头39910 于 2013-5-31 15:34 编辑

StringBuffer sb=new StringBuffer();
StringBuffer sb1=sb.append("abc");
System.out.println(sb==sb1);
打印结果为什么是true,明明sb1在sb的基础上添加内容了啊,求解

16 个回复

倒序浏览
你的语句可以拆成下面语句,
StringBuffer sb=new StringBuffer();
sb.append("abc");
StringBuffer sb1=sb;
他们指的同一个容器,所以相同

评分

参与人数 1技术分 +1 收起 理由
刘胜寒 + 1

查看全部评分

回复 使用道具 举报
对啊!!!!!!!!!!
回复 使用道具 举报
Sb跟sb1指向同一个容器。。是你自己绕晕了
回复 使用道具 举报
你这个等于在sb中附加了内容后,将sb的地址传给了sb1,两个引用的内容是相同的,指向的是相同的对象。
回复 使用道具 举报
这个跟StringBuffer里的内容无关,==符号比的是两个容器的的引用地址。如果要比较内容,要用sb.toString().equals(sb1.toString()).

sb引用的是StringBuffer的对象的引用地址,sb1引用的是sb的引用地址,所以就为true了。
回复 使用道具 举报
我估计你是,“== ”运算没弄明白,
举个小例子给你参考下:
                     int a = 1;
                int b = a;
                System.out.println(a==b);//true
这种你懂得话,你的例子:
StringBuffer sb=new StringBuffer();
StringBuffer sb1=sb.append("abc");
System.out.println(sb==sb1);
和上面是一样的性质,就如同指针 sb , sb1 都是指向同一个地址,且==又是判断地址是否相同的,所以sb == sb1就是true。
希望对楼主有帮助。
回复 使用道具 举报
其实是这样的:
StringBuffer sb = new StringBuffer(); //这句话只是将对象进行初始化,并将应用赋值给变量sb

sb = sb.append("abc");   这个sb对象虽然内容改变了,但是它所持有的引用并没有变。

回复 使用道具 举报
在俺印象里楼主一直是非常犀利的,这个。。。。。
估计是学习太认真了。。。
要注意劳逸结合。。
回复 使用道具 举报
这个,API写的明白,这个StringBuffer 的append函数返回的还是原来的容器,只是里面多添加了一些东西,所以就相等了,
回复 使用道具 举报

简单说就是 sb 和 sb1 指向了同一个地址,这个地址就是 StringBuffer 缓冲区对象的地址。
无论再怎么添加,都是在这个缓冲区对象里面操作的,地址没有变。
回复 使用道具 举报
指向是同一个引用,所以为true。

无标题.png (22.24 KB, 下载次数: 0)

无标题.png
回复 使用道具 举报
小石头39910 来自手机 中级黑马 2013-5-30 23:23:01
13#
神之梦 发表于 2013-5-30 20:09
在俺印象里楼主一直是非常犀利的,这个。。。。。
估计是学习太认真了。。。
要注意劳逸结合。。 ...

兄弟,此话从何说起啊?什么叫做犀利?????不懂,求解释……
回复 使用道具 举报
就是决定你是比较厉害滴
回复 使用道具 举报
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!
回复 使用道具 举报
因为一开始sb是空的,当sb.append("abc")是即在sb上加了字符串abc,而又把此值付给sb1.所以相等的
回复 使用道具 举报
解一
。楼
。正
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马