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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© vipzh 中级黑马   /  2012-12-1 13:46  /  1559 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String中用“+”连接字符串跟StringBuffer中的append方法有什么区别?

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

7 个回复

倒序浏览
区别大了,String的“+”要分配新的字符数组空间,将新字符串存进去,
而StringBuffer的append方法只是将新字符数组加在原字符数组的后面。效率更高。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
String的“+”是在串池中新开辟了一个空间,再加上原来的Strig的空间,就有两个了,
而StringBuffer则是在原基础上增加的
回复 使用道具 举报
先说说String和StringBuffer
String 是一个最终的 也就是final的数据类型;不可以被更改的
比如:String s = “abc”; 这个abc是一个对象,在内存中被分配了一块空间
通过字符串连接 String s = "abc"+"cde";
System.out.println(s);
虽然打印的结果是abccde,但是内存为abc分配的空间依然在;
这个abccde只是内存又另开辟了一块空间用来存储新的对象abccde;
StringBuffer:是一个字符串缓冲区;相当于一个容器的;
StringBuffer的append方法是往容器里添加东西,内存中并没有重新分配空间;

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法
回复 使用道具 举报
String是一种不可被继承和修改的java对象,一旦在内存中定义,那么他就是那个样了,不能变动了。而StringBuffered是一种对String类的包装。他在创建的时候有一个缓冲区。当我们准备去改变StringBuffered的内容时,实际上我们就开启了他的缓冲功能,在缓冲区中有一千的字符串,我们把新的字符串用append方法添加进去的时候我们是添加进了缓冲区,并没有真正添加进对内存。如果我们要使用它必须将它放进内存,所以很多时候我们会将StringBuffered转换成String类型的在放进内存。而String的"+"虽然也是添加字符串。但是在真正添加之前。虚拟机会将String类转换成StringBuffered类型,再利用他的缓冲功能将字符串添加进去。最后我们要向使用这个新的字符串,同样必须先将它放进对内存。这个时候虚拟机就会为新的字符串分配新的地址空间,而以前的字符串一般就被放弃不使用了。而如果要想再次改变该字符串就得再次将String类型变成StringBuffered类型。这样一来一往的就会降低系统性能。所以如果我们的字符串经常被改变,为了提高性能就应该使用StringBuffered了i。等最后确定了内容再一次性的使用toString方法转变成String类型。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
String一旦赋值或实例化后就不可更改,如果赋予新值将会重新开辟内存地址进行存储。





而StringBuffer类使用append和insert等方法改变字符串值时只是在原有对象存储的内存地址上进行连续操作,减少了资源的开销。
回复 使用道具 举报
String一旦赋值或实例化后就不可更改,如果赋予新值将会重新开辟内存地址进行存储。





而StringBuffer类使用append和insert等方法改变字符串值时只是在原有对象存储的内存地址上进行连续操作,减少了资源的开销。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马