-
高分求证:StringBuffer和String的性能比较30
先前看到论坛中有人说JDK5下,String的连加操作会被JVM优化为StringBuffer.append()操作,因此拼装String时,两者的性能是一样的。今天闲着没事,写了段小程序测试了一下,对字母A进行1100次拼接,发现StringBuffer的性能比String连加要高出将近100倍,不知是怎么回事。各位给看看,附件是我的测试程序。
问题补充:添加了附件
问题补充:再次添加附件
问题补充:晕,附件添加不进来,直接上程序。public class Test { public static void main(String[] args) { new Test().test(); } public void test() { test1(); test3(); } private void test1() { long t1 = System.nanoTime(); String aa = ""; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; aa += "A";aa += "A";aa += "A";aa += "A";aa += "A"; long t2 = System.nanoTime(); System.out.println("连加:" + (t2 - t1)/1000000.0); } private void test3() { long t1 = System.nanoTime(); StringBuffer buffer = new StringBuffer(); for(int i = 0; i < 1100; i++) { buffer.append("A"); } long t2 = System.nanoTime(); System.out.println("buffer:" + (t2 - t1)/1000000.0); } }
问题补充:引用
其实,我更想问的是,为啥之前你不用循环
因为之前看到的帖子上说,JVM不会优化for循环内的String连加操作,所以才会不厌其烦的写了1100个连加。
引用
在字符串修改操作频繁的情况下, 肯定是 StringBuffer 的性能优于 String 的性能.
StringBuffer 出现的目的就是为了改进 String 的缺点
只不过 StringBuffer 是线程安全的, 它会在线程控制方面额外用力, 如果是单线程环境下频繁操作字符串, 可以使用 StringBuilder
这个我知道,我想问的是,之前别的帖子上说,JDK5下JVM会将String连加优化为StringBuilder.append()操作,这样的话,上面的测试中,两者的耗时应该是很接近的,但实际却不是这样,不解。
问题补充:引用
引用
这个我知道,我想问的是,之前别的帖子上说,JDK5下JVM会将String连加优化为StringBuilder.append()操作,这样的话,上面的测试中,两者的耗时应该是很接近的,但实际却不是这样,不解。
他这么说有给出他的依据么? 这个可以咨询他一下的.
但是据我查看 JDK 5 的 changenote, 是没有提到 String 的这一优化方式的.
http://java.sun.com/j2se/1.5.0/ReleaseNotes.html#intro
这个是原帖,倒数第三楼。
http://www.iteye.com/topic/585121
引用为啥你那么纠结性能?既然你知道StringBuffer 和 String 在处理不同问题上的优点.为啥你还要去关注性能呢?不解!
如果说JDK5下两者的性能一样的话,那以后编程过程中就不用刻意使用StringBuffer了,String连加不是更方便吗?这才是我要验证这个说法的最终目的。
引用很明显这位大神在浪费时间。。。
哎,世风日下!
问题补充:引用
如果官方没有文档的话,
1) 可以咨询这个讨论主题里提出这个观点的人
2) 搜索相关主题
因为在这里, 很难遇到对这个在官方文档都没有提及的问题有深入了解的人
这两步现在都做了,原帖中的当事人还没有回复。
这个优化在官方文档是否有说明,不太清楚。但在网上一搜,很多帖子都谈到了这个问题,应该不是以讹传讹吧,呵呵。
刚才又看到一篇帖子,貌似解释的不错,可以参照下:
http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380147d8c8c4668d4e419ce3b4c413037bfa6663f405a8e906b6075a81e0fb9f367263c0123b59999cf1d8dac925f75ce786a6459db0144dc41eb945125b061d61ab2f34cf0ba8173d5ee898f8a04149e07523a&p=b47ac800c5d912a058bd9b7d0d48&user=baidu
可能我的程序中不应该使用+=号。
问题补充:引用
你在看一下,别的帖子说的String连加会不会是
aa="A"+"A"+"A"+"A"+"A"+"A"+"A"+"A"+"A"+"A"+"A"+"A"
而不是
aa += "A";aa += "A";aa += "A";aa += "A";aa += "A";
呵呵,好像确实是这样。第二种会多创建出很多小对象。
引用
我记得当时我侧过10w循环的测试
String 和StringBuffer 时间没有任何差别!!
我不知道你是怎么测得啊
如上,估计是测试程序的问题。2010年7月07日 20:59
13个答案 按时间排序 按投票排序
-
采纳的答案
JVM优化是对的,我这里没有JDK5.0.用的是6.0测试的,6.0对于String的连加采用的是StringBuilder优化的,按说优化了为什么StringBuffer的性能还是那么好呢。下面就分析一下。测试用例如下:
/** * @author 飞雪无情 * @since 2010-7-10 */ public class TestStringBuffer { public void testString(){ String s=""; for(int i=0;i<10000;i++){ s+=i; } } public void testStringBuffer(){ StringBuffer s=new StringBuffer(""); for(int i=0;i<10000;i++){ s.append(i); } } }
这两个函数分别演示了string的连加和StringBuffer操作,执行测试,我本机上testString()600多毫秒,testStringBuffer()不超过20毫秒。下面就分析为什么,我们采用JDK的反汇编工具javap,执行javap -c TestStringBuffer后我们看到CMD输出,我们挑重要的看,先看方法testString。public void testString(); Code: 0: ldc #19; //String 2: astore_1 3: iconst_0 4: istore_2 5: goto 30 8: new #21; //class java/lang/StringBuilder 11: dup 12: aload_1 13: invokestatic #23; //Method java/lang/String.valueOf:(Ljava/lang/Objec t;)Ljava/lang/String; 16: invokespecial #29; //Method java/lang/StringBuilder."<init>":(Ljava/la ng/String;)V 19: iload_2 20: invokevirtual #32; //Method java/lang/StringBuilder.append:(I)Ljava/la ng/StringBuilder; 23: invokevirtual #36; //Method java/lang/StringBuilder.toString:()Ljava/l ang/String; 26: astore_1 27: iinc 2, 1 30: iload_2 31: sipush 10000 34: if_icmplt 8 37: return
我就不一行行分析了,有兴趣的可以看看相关知识,分析关键的,循环从“2:”开始到“34:”看第“8:”,创建了一个StringBuilder,然后使用append方法("第20:")进行String连加的优化,最要注意的是 创建这个StringBuilder,是在循环里面,也就是说我们循环多少次就会创建多少个StringBuilder,这就很影响性能(创建对象是很耗性能的).然后我们看testStringBuffer方法。public void testStringBuffer(); Code: 0: new #46; //class java/lang/StringBuffer 3: dup 4: ldc #19; //String 6: invokespecial #48; //Method java/lang/StringBuffer."<init>":(Ljava/lan g/String;)V 9: astore_1 10: iconst_0 11: istore_2 12: goto 24 15: aload_1 16: iload_2 17: invokevirtual #49; //Method java/lang/StringBuffer.append:(I)Ljava/lan g/StringBuffer; 20: pop 21: iinc 2, 1 24: iload_2 25: sipush 10000 28: if_icmplt 15 31: return
看看多么简单,在循环开始前创建好StringBuffer,然后再循环里面调用append方法(第17:),只创建了一个对象,然后只在缓冲区里面进行字符操作。2010年7月10日 13:02
-
你在看一下,别的帖子说的String连加会不会是
aa="A"+"A"+"A"+"A"+"A"+"A"+"A"+"A"+"A"+"A"+"A"+"A"
而不是
aa += "A";aa += "A";aa += "A";aa += "A";aa += "A";2010年7月08日 21:05
-
如果官方没有文档的话,
1) 可以咨询这个讨论主题里提出这个观点的人
2) 搜索相关主题
因为在这里, 很难遇到对这个在官方文档都没有提及的问题有深入了解的人2010年7月08日 14:13
-
引用这个我知道,我想问的是,之前别的帖子上说,JDK5下JVM会将String连加优化为StringBuilder.append()操作,这样的话,上面的测试中,两者的耗时应该是很接近的,但实际却不是这样,不解。
他这么说有给出他的依据么? 这个可以咨询他一下的.
但是据我查看 JDK 5 的 changenote, 是没有提到 String 的这一优化方式的.
http://java.sun.com/j2se/1.5.0/ReleaseNotes.html#intro2010年7月08日 12:14
-
为啥你那么纠结性能?既然你知道StringBuffer 和 String 在处理不同问题上的优点.为啥你还要去关注性能呢?不解!
2010年7月08日 10:49
-
在字符串修改操作频繁的情况下, 肯定是 StringBuffer 的性能优于 String 的性能.
StringBuffer 出现的目的就是为了改进 String 的缺点
只不过 StringBuffer 是线程安全的, 它会在线程控制方面额外用力, 如果是单线程环境下频繁操作字符串, 可以使用 StringBuilder2010年7月07日 23:16
相关推荐
StringBuffer和String_区别 java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的...
String、StringBuilder和StringBuffer的区别 String、StringBuilder和StringBuffer的区别 String、StringBuilder和StringBuffer的区别
String、StringBuffer和StringBuilder的比较 通过上面的分析,我们可以看到,String类的字符串是不可变的,而StringBuffer和StringBuilder类的字符串可以被修改。StringBuffer类是线程安全的,而StringBuilder类...
String,StringBuffer,StringBuilder区别。几乎所有的应用开发都离不开操作字符串,理解字符串的设计和实现以及相关 工具如拼接类的使用,对写出高质量代码是非常有帮助的
字符串处理基础知识 String、StringBuffer 和 StringBuilder 是 Java 语言中三种不同类型的字符串处理方式,它们之间存在着明显的性能和线程安全性差异。...选择合适的字符串处理方式取决于具体的应用场景和性能要求。
StringBuffer:字符创变量 StringBuilder:字符创变量 从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问 ,比如这段代码:
黑马程序员java培训就业班笔记:StringBuffer、基本数据类型的封装)总结
stringbuffer和string的区别.pdf
在 Java 中,String, StringBuffer 和 StringBuilder 三个类都是用于字符操作的,但它们之间有着很大的区别。 首先,String 是不可变类,意味着一旦创建了 String 对象,就不能修改它的值。每次对 String 对象的...
在Java编程语言中,`String`和`StringBuffer`都是用来表示和操作字符串的重要类,但它们在使用场景和性能上有显著的区别。了解这些差异对于编写高效、优化的代码至关重要。 首先,`String`类是不可变的。这意味着...
在Java编程语言中,`String`、`StringBuffer`和`StringBuilder`是处理字符串的三个重要类,它们各自有特定的使用场景和优缺点。理解它们的差异对于编写高效的代码至关重要。 **String类** `String`是不可变的类,...
针对String的详细介绍针对String的详细介绍针对String的详细介绍针对String的详细介绍针对String的详细介绍针对String的详细介绍针对String的详细介绍针对String的详细介绍针对String的详细介绍针对String的详细介绍...
字符串在Java中的表现形式主要有两种:`String`和`StringBuffer`(或者`StringBuilder`)。它们之间的主要区别在于可变性、性能和使用场景。 1. **不可变性**: `String`类是不可变的,这意味着一旦创建了一个`...
StringBuffer 对象和 String 对象之间的互转可以使用 toString() 方法和构造方法,例如:String s = "abc"; StringBuffer sb = new StringBuffer(s); String s1 = sb.toString(); StringBuffer 类中的方法主要偏重...
在Java编程语言中,`String`和`StringBuffer`(在Java 5之后被`StringBuilder`取代,但在多线程环境中仍然使用`StringBuffer`)是处理文本字符串的两个核心类,它们各自有着不同的特性和用途。理解它们的区别对于...
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据.这个String类提供了数值不可改变的字符串.而这个StringBuffer类提供的字符串进行修改.当你知道字符数据要改变的时候...
stringbuilder用法 String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String...
String 和StringBuffer 的性能比较 在大量字符串拼接的场景下,StringBuffer 的性能远远高于 String。例如: * 使用 String 进行字符串拼接:String str = new String(); for(int i=0;i;i++){ str= str + i;} 这种...
#include "rapidjson/stringbuffer.h"// rapidjson::StringBuffer buf; rapidjson::Writer<rapidjson::StringBuffer> writer(buf); //rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(buf); // it can ...
String的效率低于StringBuffer,开发时最好选用StringBuffer。