java的String、StringBuilder、StringBuffer拼接速度比较

您所在的位置:网站首页 string对象存储字符串的效率比stringbuffer高 java的String、StringBuilder、StringBuffer拼接速度比较

java的String、StringBuilder、StringBuffer拼接速度比较

2023-10-16 03:50| 来源: 网络整理| 查看: 265

Java有String/StringBuilder/StringBuffer这三个类,那我们平时使用字符串拼接的时候哪个性能高呢? 如下代码,分别比较String、StringBuilder、StringBuffer在运行100000此字符串拼接耗时:

public class Test { public static void main(String[] args) { int runnum = 100000; System.out.println("运行" + runnum + "次:"); String a = ""; long tim1 = System.currentTimeMillis(); for (int i = 0; i < runnum; i++) a += "1"; long tim2 = System.currentTimeMillis(); System.out.println(("普通str连接用时:" + (tim2 - tim1) + "毫秒")); StringBuilder sb = new StringBuilder(); tim1 = System.currentTimeMillis(); for (int i = 0; i < runnum; i++) sb.append("1"); tim2 = System.currentTimeMillis(); System.out.println(("stringbuilder+append连接用时:" + (tim2 - tim1) + "毫秒")); StringBuffer sf = new StringBuffer(); tim1 = System.currentTimeMillis(); for (int i = 0; i < runnum; i++) sf.append("1"); tim2 = System.currentTimeMillis(); System.out.println(("stringbuffer+append连接用时:" + (tim2 - tim1) + "毫秒")); } }

在这里插入图片描述 嗯 String完败,StringBuilder和StringBuffer差不多,为什么呢? 因为对String的操作,我们并没有在原对象的基础上进行append,而是生成了新的对象,,这么一想上面的每一次操作,都申请内存生成了一个新的对象,频繁操作下,无怪乎效率如此低下。 结论:

对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象频繁的字符串拼接操作切记不可用String

那么,StringBuilder和StringBuffer呢?我们提高运行的次数1000000: 在这里插入图片描述 差距拉开了,StringBuilder有优势了,继续,变为10000000次(我将String的给注释掉了。。一把王者都打完了都还没跑完,太痛苦了): 在这里插入图片描述 嗯,结果很明显了,StringBuilder比StringBuffer效率又要高点,这又是为什么呢? 在这里插入图片描述 从StringBuffer的append方法的源码可知,看到了synchronized关键字,原来它是线程安全的,每次只有一个线程能访问资源,所以在大数量的append操作时,比线程不安全的StringBuilder效率要低一点。

结论:

StringBuffer线程安全,适合多线程编程的时候使用StringBuilder线程不安全,但效率比StringBuffer高


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3