String、StringBuffer、StringBuilder的区别和解析
程序员文章站
2023-03-28 10:08:48
1、三个类之间的关系 他们都是通过字符数组来实现的,继承关系 String:字符串常量,不可变类 StringBuffer:字符串变量,可变类,线程安全 StringBuilder:字符串变量,可变类,线程不安全 2、执行速度 String < StringBuffer < StringBuildr ......
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:适用于多线程下在字符缓冲区进行大量操作的情况
上一篇: List接口以及数据结构存储特点
推荐阅读
-
String、StringBuffer和StringBuilder类的区别
-
java引用传递和值传递的区别(2者基本区别解析)
-
java中String和StringBuffer的区别
-
解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
-
全面解释java中StringBuilder、StringBuffer、String类之间的关系
-
jquery中attr和prop的区别解析
-
Java中String、StringBuffer、StringBuilder的区别(转)
-
::before和:after的区别解析
-
解析iptables中SNAT和MASQUERADE之间的区别
-
Oracle硬解析和软解析的区别分析