黑马程序员技术交流社区

标题: String问题,这三种String的累加操作有什么区别。 [打印本页]

作者: 郑涛    时间: 2012-4-8 00:17
标题: String问题,这三种String的累加操作有什么区别。
哪种写法更好,内存效率更高
① String tmp = "a" + "b" + "c";
② String tmp = null;
tmp+= "a";
tmp+= "b";
tmp+= "c";
③ String tmp = null;
StringBuffer buf = new StringBuffer();
buf.append("a");
buf.append("b");
buf.append("c");
tmp = buf.toString();
作者: 曾晓文    时间: 2012-4-8 00:34
最快是:StringBuilder buf = new StringBuilder ();
buf.append("a");
buf.append("b");
buf.append("c");
tmp = buf.toString();
因为StringBuilder 是带缓冲区的,并且是线程不安全的(即:new一个缓冲区,不断往里填充数据,然后返回字符串,由于不考虑线程安全,速度更快。但是不能用于多线程,因为是线程不安全的,会有数据安全问题)。StringBuffer次之,且StringBuffer是线程安全的,能用于多线程,但效率比StringBuilder 差一点。字符串拼接效率肯定是最低的,由于字符串是不可变的,每次拼接会new出一个新的String对象,太耗资源。所以,涉及频繁的字符串改变问题,不要用字符串拼接的方式,耗资源。应该用StringBuilder 和StringBuffer,具体的:单线程用StringBuilder ,多线程用StringBuffer
作者: 宋蕈    时间: 2012-4-8 08:29
用stringBuffer()好些,因为string就相当于又new 了一个对象,
string和stringBuffer的区别是,string是定长,长度不可变的,每次修改就又new 了一个对象,而StringBuffer是的长度是可变的,不会再new一个对象,用append添加
作者: 李震 李震 李震    时间: 2012-4-8 09:30
  StringBuffer  效率跟高,同时存储操作字符串,String的话,每操作一次,就会新增一个对象,而SStringBuffer 的话,是在本身上动态添加操作字符串。
作者: niceBoy    时间: 2012-4-8 09:37
StringBuffer buf = new StringBuffer();好些
String字符串是常量;它们的值在创建之后不能更改。每次相加就要创建新的字符串对象。
StringBuffer是字符串缓冲区,是一个容器。支持可变的字符串,每次相加无需再创建新的字符串对象
至于那个快哪个慢,用currentTimeMillis()--( 返回以毫秒为单位的当前时间。)写个程序看看就知道
作者: pray    时间: 2014-4-26 04:53
帮你顶,人还是厚道点好




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