String、Stringbuffer和Stringbuilder的区别

纯属个人总结

1.运行速度方面

由快到慢的排列为StringBuilder > StringBuffer > String

原因:

String为字符串的常量,而StringBuilder和StringBuffer为字符串变量。对象一旦创建是不能够更改的,但是变量是可以的。

String str = "abc";

s =s+1;

说明:我们所看到的就是变量发生了改变,但是实际的情况是没有发生改变。为什么这么说呢?

这实际就是一种假象,jvm是这样解释的,首先创建了变量str,赋值为“abc”,在执行第二段代码的时候,jvm又重新的创建了一个变量str,也就是说,原有的str变量时没有改变的,所以说string是不可改变的对象。也是因为这种机制,每次执行的时候都会创建个新的对象,而原来的对象会被GC回收,因此效率很慢。

但是stringbuilder和stringbuffer就不一样了,它们属于字符串变量,是可以改变的。每当我们对字符串进行操作,实际上是对原有的对象进行操作,



stringBuffer和stringBuilder区别

StringBuilder:线程非安全的

StringBuffer:线程安全的

当我们字符串缓冲区被多个多线程使用时候,jvm不能保证stringbuilder的操作是安全的,但是能保证stringbuffer是安全的。但是在多数的情况下,我们使用stringbuilder而不使用stringbuffer的原因就是速度问题。




 对于三者使用的总结: 1.如果要操作少量的数据用 = String

             2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder

              3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer




你可能感兴趣的:(Java,string)