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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kfcka 中级黑马   /  2015-2-12 21:10  /  1329 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 kfcka 于 2015-2-12 21:38 编辑

StringBuffer sb1=new StringBuffer();
StringBuffer sb2=new StringBuffer("abc");
问题:sb1==sb2 ? 为什么?同问:
StringBuffer sb1=new StringBuffer();
StringBuffer sb2=sb1.append("abc");
问题:sb1==sb2 ? 为什么?

3 个回复

正序浏览
第一个false
第二个ture
第一个创建了两个内存空间地址
第二个使用了第一个的内存地址
回复 使用道具 举报
首先==比较的是地址值,先明确一下
第一个是false,因为不管是内容还是地址都不一样,每new一次就是建立一个新的对象,那么他们的地址肯定不一样。况且一个的值是空一个的值是abc。
第二个还是true,因为StringBuffer sb2=sb1.append("abc");的时候相当于一个String类的变量sb2指向了sb1.append("abc")这个对象,sb1.append("abc")会返回一个字符串容器对象让String类的变量sb1指向,那么sb1就==sb2了。
以上,如果有什么错误希望指正。
回复 使用道具 举报
肯定是false啊,==比较的是地址。而StringBuffer是字符串缓冲区,你new了两个StringBuffer,在堆内存里开辟了两个空间,地址肯定不相同啊。返回的就会false。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马