String、StringBuffer、StringBuilder的区别和解…

2018-09-05 07:47:21来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

1、三个类之间的关系

  他们都是通过字符数组来实现的,继承关系

 

  String:字符串常量,不可变类

  StringBuffer:字符串变量,可变类,线程安全

  StringBuilder:字符串变量,可变类,线程不安全

2、执行速度

  String < StringBuffer < StringBuildrr

  两个易混淆的例子

1 String s1 = "abc" + "d";
2 String s2 = "a";
3 String s3 = "b";
4 Sting s4 = s2 + s3;
5 StringBuffer buffer = new StringBuffer("a").append("b");

  在这里s1的速度比s4的执行速度快,在s1和StringBuffer比较中,String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢

3、线程安全和非线程安全

  StringBuffer是线程安全的,StringBuilder是线程不安全的,所以执行速度StringBuffer更快一些,因为要保证线程安全肯定会增大一些开销

  观察源码,这里就不贴了,StringBuilder中通过synchronized来保证线程安全,可是!并不是所有的方法都用了synchronized关键字来修饰,没有synchronized修饰的方法是调用StringBuffer类的其他方法来实现同步的。

4、总结

  String:适用于少量的字符串操作的情况

  StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

  StringBuffer:适用于多线程下在字符缓冲区进行大量操作的情况

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:创建和获取cookie

下一篇:手把手JDK环境变量配置