String、StringBuffer和StringBuilder的区别及应用场景

Posted on 2018-07-03 09:53  七月妖妖无  阅读(3058)  评论(0编辑  收藏  举报

1. 运行速度:StringBulider>StringBuffer>String

                       String:字符串常量

                       StringBuffer、StringBulider:字符串变量

 String为什么运行行慢呢?

                       创建String对象后,不能再改变;而StringBuffer和StrignBulider创建对象后,还可以改变(每次改变String的值,都要新创建一个对象,再将引用                           指向该对象,浪费内存空间,内存中的无用引用多了以后,jvm的GC就开始工作,系统就会慢了)。

 2.线程安全:StringBuffer是线程安全的,因为StringBuffer的很多方法中都可以使用Sychronized关键字,可保证线程安全,而StringBulider的方法中没有该关键字,不能保证线程安全。

 3.适用场景:String:适用于少量字符串操作情况。

                      StringBulider:适用于单线程在字符串缓存区进行大量操作。

                      StringBuffer:适用于多线程在字符串缓存区进行大量操作。

 4.举个例子:

String:每次改变String的值,都要新创建一个对象,再将引用指向该对象,浪费内存空间,内存中的无用引用多了以后,jvm的GC就开始工作,系统就会慢了。

StringBuffer:StringBuffer每次都是对对象本身进行操作,而有种特殊情况String要比StringBuffer快:

      String s="This"+"is a pen";

      StringBuffer sb=new StringBuffer("This").append("is a pen");

    创建上面这两个的速度其实都差不多,但是下面这种就能体现出StrignBuffer的优势了

 

      String s1="This";

      String s2="is a pen";

      String s3=s1+s2;

 

那么重点来了:具体使用场景,我找到了一个很有用的:https://www.zhihu.com/question/20101840