StringBuffer跟StringBuilder的区别
昨天面试,考官问我StringBuffer跟StringBuilder的区别。
哪位大神能帮我详细讲解下吗?具体怎么用,提供点例子。小妹感激
------最佳解决方案--------------------
String, StringBuffer, StringBuilder 三者都实现了CharSequence接口,意思是这三者都是字符序列,他们的底层都是用char[]实现的
但String和其他两者有很大的不同,String是不可变的,意思就是你在生成String对象后就不能改变其内部的char[]了,最初的char[]是什么就会一直是什么。这样设计的目的是简化存储(也就是String对象的共享)。
而StringBuffer, StringBuilder呢则是可变的,意思是你在生成其对象后可以改变其内部的char[],比如扩容,插入,删除等,这两个类是用于动态创建字符串的。这两者都是继承于AbstractStringBuilder,也就是他们具有相同的API(调用方式相同),两者间的不同唯一就是StringBuffer是线程安全的(可用于并发环境),StringBuilder不是线性安全的(不能用于并发环境,如果使用,可能会出现问题)。当在单线程环境时最好使用StringBuilder,应为他不用检查对象锁,所以速度、效率要更高
大概就这些了
------其他解决方案--------------------StringBuffer线程同步,安全,效率低(少量数据看不出差别)
StringBuilder不同步,效率高
String[] 长度不可变。上面两个长度可变(原因:上面两个底层实现也是String类型的数组,只不过根据需求,增加容量,同时将原来String数组中的元素拷贝到新的String数组中)。
想要更明白,直接看源码吧。
------其他解决方案--------------------StringBuffer的大部分方法上有个synchronized关键字,StringBuilder上没有,仅此
------其他解决方案--------------------StringBuffer线程同步,安全,效率低(少量数据看不出差别)
StringBuilder不同步,效率高
------其他解决方案--------------------StringBuffer是线程安全的(可用于并发环境),StringBuilder不是线性安全的(不能用于并发环境,如果使用,可能会出现问题)
------其他解决方案--------------------
有这功夫发帖子问,还不如看源码呢,真替你着急!
------其他解决方案--------------------
看了下API中的String,StringBuffer, StringBuilder. 请问我可不可以这么理解:
String主要用于处理一个固定的字符串(各种截取,分割,转换等)
StringBuilder处理一个可变的字符串(增加,插入等)
StringBuffer 在次基础上线程安全?
那StringBuilder跟String[]有差异吗? 它比StringBuilder更方便,能自动增加长度。 对吗大神?
------其他解决方案--------------------
看了下API中的String,StringBuffer, StringBuilder. 请问我可不可以这么理解:
String主要用于处理一个固定的字符串(各种截取,分割,转换等)
StringBuilder处理一个可变的字符串(增加,插入等)
StringBuffer 在次基础上线程安全?
那StringBuilder跟String[]有差异吗? 它比StringBuilder更方便,能自动增加长度。 对吗大神?