张小飞的Java之路——第二十七章——StringBuilder

张小飞的Java之路——第二十七章——StringBuilder写在前面:视频是什么东西,有看文档精彩吗?视频是什么东西,有看文档速度快吗?视频是什么东西,有看文档效率高吗?1. StringBuilder张

欢迎大家来到IT世界,在知识的湖畔探索吧!

写在前面:

视频是什么东西,有看文档精彩吗?

视频是什么东西,有看文档速度快吗?

视频是什么东西,有看文档效率高吗?

1. StringBuilder

张小飞:StringBuilder是什么?

诸小亮:StringBuilder 跟 StringBuffer 的用法一样,但是效率稍微高一些

张小飞:哦?这是为什么?

诸小亮:你看看下面的测试结果

public static void main(String[] args) throws Exception {
    //获取当前时间的毫秒值
    long l = System.currentTimeMillis();
	StringBuffer str = new StringBuffer();//使用StringBuffer,append 一千万次
    for(int i = 0;i<10000000;i++){
        str.append(i);
    }
    System.out.println(System.currentTimeMillis() - l);
}

欢迎大家来到IT世界,在知识的湖畔探索吧!

结果:

张小飞的Java之路——第二十七章——StringBuilder

欢迎大家来到IT世界,在知识的湖畔探索吧!public static void main(String[] args) throws Exception {    //获取当前时间的毫秒值    long l = System.currentTimeMillis();	StringBuilder str = new StringBuilder();//使用StringBuilder,append 一千万次    for(int i = 0;i<10000000;i++){        str.append(i);    }    System.out.println(System.currentTimeMillis() - l);}

结果:

张小飞的Java之路——第二十七章——StringBuilder

张小飞:明白了,不过既然用法一样,为什么搞两个类呢?只用StringBuilder不就行了

诸小亮:问得好,这是因为 StringBuffer 是在早期的JDK版本种就推出了,而 StringBuilder 是JDK5 才推出的

张小飞:原来是这样,那为什么 StringBuilder 效率要高呢?

诸小亮:因为他们两个是有区别的

  • StringBuffer:是线程同步的,多线程操作是安全的
  • StringBuilder:非线程同步,多线程操作不安全,但是单线程下效率高于StringBuffer

张小飞:StringBuffer 是线程安全的?

诸小亮:是的,因为StringBuffer所有方法都是同步方法

张小飞的Java之路——第二十七章——StringBuilder

张小飞:原来如此,就是因为同步,导致 StringBuffer 效率相对来说比 StringBuilder 低一些

诸小亮:是的,不过因为在 JDK 1.6 ,synchronized 进行了升级,所以它们的差别现在很小

2. 优化

张小飞:您之前说,两个 String 之间,用 + 连接时,进行了一些优化,什么样子的优化?

诸小亮:一共分 3 种,我们一个个看

1. 静态字符串相加

诸小亮:静态字符串相加,比如:

张小飞的Java之路——第二十七章——StringBuilder

在编译为 class 文件时,就已经做了优化

张小飞:什么样子的优化?

诸小亮:双击打开 class 文件,就可以看到效果了

张小飞的Java之路——第二十七章——StringBuilder

张小飞:明白了

2. 变量相加的优化

张小飞:那么第二种呢?

诸小亮:第二种是变量相加,比如;

张小飞的Java之路——第二十七章——StringBuilder

张小飞:这种是???

诸小亮:在JDK5——JDK8的时候,会创建一个 StringBuilder 对象,相当于

String s2 = new StringBuilder(s).append("貂蝉").append("吕布").toString();

张小飞:原来如此,明白了

诸小亮:但是 JDK9 的时又进行了修改,使用 StringConcatFactory 的 makeConcatWithConstants 方法

张小飞:这个进行了怎样的优化?

诸小亮:这个。。。,很抱歉,目前并不知道它是如何优化的,暂时作为了解吧

张小飞:好吧,那我们现在是 JDK11 还有优化?

诸小亮:没有了,JDK11 跟 JDK9 一样

3. 循环相加

张小飞:第三种呢?

诸小亮:其实第三种跟第二种类似

张小飞的Java之路——第二十七章——StringBuilder

张小飞:您的意思是,s2 += i,也是用了StringBuilder对象?,相当于

欢迎大家来到IT世界,在知识的湖畔探索吧!String s2 = new StringBuilder(s).append("i");

诸小亮:没错,你领悟的还挺快

张小飞:哈哈,不过,这样不是每一次循环都会创建一个 StringBuilder 对象吗?

诸小亮:是的,所以遇到这种情况,还是建议在 for 循环的外面创建一个 StringBuilder 对象

张小飞:明白了

诸小亮:另外,JDK9之后,这种也是使用 StringConcatFactory 的 makeConcatWithConstants 方法

张小飞:了解

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/32443.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信