当前位置: 移动技术网 > IT编程>开发语言>Java > String、StringBuffer、StringBuilder的区别和解析

String、StringBuffer、StringBuilder的区别和解析

2018年09月03日  | 移动技术网IT编程  | 我要评论

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:适用于多线程下在字符缓冲区进行大量操作的情况

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网