黑马程序员技术交流社区

标题: String和StringBuffer [打印本页]

作者: vipzh    时间: 2012-12-1 13:46
标题: String和StringBuffer
String中用“+”连接字符串跟StringBuffer中的append方法有什么区别?
作者: ljhheima    时间: 2012-12-1 13:49
区别大了,String的“+”要分配新的字符数组空间,将新字符串存进去,
而StringBuffer的append方法只是将新字符数组加在原字符数组的后面。效率更高。
作者: 邱峁    时间: 2012-12-1 14:10
String的“+”是在串池中新开辟了一个空间,再加上原来的Strig的空间,就有两个了,
而StringBuffer则是在原基础上增加的
作者: 孙万利    时间: 2012-12-1 15:32
先说说String和StringBuffer
String 是一个最终的 也就是final的数据类型;不可以被更改的
比如:String s = “abc”; 这个abc是一个对象,在内存中被分配了一块空间
通过字符串连接 String s = "abc"+"cde";
System.out.println(s);
虽然打印的结果是abccde,但是内存为abc分配的空间依然在;
这个abccde只是内存又另开辟了一块空间用来存储新的对象abccde;
StringBuffer:是一个字符串缓冲区;相当于一个容器的;
StringBuffer的append方法是往容器里添加东西,内存中并没有重新分配空间;

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





而StringBuffer类使用append和insert等方法改变字符串值时只是在原有对象存储的内存地址上进行连续操作,减少了资源的开销。
作者: 何向阳    时间: 2012-12-7 13:03
String一旦赋值或实例化后就不可更改,如果赋予新值将会重新开辟内存地址进行存储。





而StringBuffer类使用append和insert等方法改变字符串值时只是在原有对象存储的内存地址上进行连续操作,减少了资源的开销。




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