String、StringBuffer和StringBuilder的区别
1、⽤来处理字符串常⽤的类有3种:String、StringBuffer和StringBuilder
2、三者之间的区别:
都是final类,都不允许被继承;
String类长度是不可变的,StringBuffer和StringBuilder类长度是可以改变的;
StringBuffer类是线程安全的,StringBuilder不是线程安全的;
String 和 StringBuffer:##
1、String类型和StringBuffer类型的主要性能区别:String是不可变的对象,因此每次在对String类进⾏改变的时候都会⽣成⼀个新的string对象,然后将指针指向新的string对
字符串长度的判断象,所以经常要改变字符串长度的话不要使⽤string,因为每次⽣成对象都会对系统性能产⽣影响,特别是当内存中引⽤的对象多了以后,JVM的GC就会开始⼯作,性能就会降
低;
2、使⽤StringBuffer类时,每次都会对StringBuffer对象本⾝进⾏操作,⽽不是⽣成新的对象并改变对象引⽤,所以多数情况下推荐使⽤StringBuffer,特别是字符串对象经常要改
变的情况;
3、在某些情况下,String对象的字符串拼接其实是被Java Compiler编译成了StringBuffer对象的拼接,所以这些时候String对象的速度并不会⽐StringBuffer对象慢,例如:
StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”); ```
⽣成 String s1对象的速度并不⽐ StringBuffer慢。
## StringBuilder ##
StringBuilder是5.0新增的,此类提供⼀个与 StringBuffer 兼容的 API,但不保证同步。该类被设计⽤作 StringBuffer 的⼀个简易替换,⽤在字符串缓冲区被单个线程使⽤的时候(这种情况很普遍)。如果可能,建议优先采⽤该类,因为在⼤多数实现使⽤策略
1、基本原则:如果要操作少量的数据,⽤String ;单线程操作⼤量数据,⽤StringBuilder ;多线程操作⼤量数据,⽤StringBuffer。
2、不要使⽤String类的”+”来进⾏频繁的拼接,因为那样的性能极差的,应该使⽤StringBuffer或StringBuilder类,这在Java的优化上是⼀条⽐较重要的原则,例如:
``` String result = "";
for (String s : hugeArray) {
result = result + s;
}
// 使⽤StringBuilder
StringBuilder sb = new StringBuilder();
for (String s : hugeArray) {
sb.append(s);
}
String result = sb.toString(); ```
3、 StringBuilder⼀般使⽤在⽅法内部来完成类似”+”功能,因为是线程不安全的,所以⽤完以后可以丢弃。StringBuffer主要⽤在全局变量中
4、相同情况下使⽤ StirngBuilder 相⽐使⽤ StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。⽽在现实的模块化编程中,负责某⼀模块的程序员不⼀定能清晰地判断该模块是否会放⼊多线程的环境中运⾏,因此:除

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。