String | StringBuffer | StringBuilder |
字符串常量(长度不可变) | 字符串变量(线程安全) | 字符串变量(非线程安全) |
String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象。
在大部分情况下 StringBuffer > String
java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同
在大部分情况下 StringBuilder > 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();
当出现上面的情况时,显然我们要采用第二种方法,因为第一种方法,每次循环都会创建一个String result用于保存结果,除此之外二者基本相同(对于jdk1.5及之后版本)。
(3)为了获得更好的性能,在构造 StirngBuffer 或 StirngBuilder 时应尽可能指定它们的容量。当然,如果你操作的字符串长度(length)不超过 16 个字符就不用了,当不指定容量(capacity)时默认构造一个容量为16的对象。不指定容量会显著降低性能。
(4)StringBuilder一般使用在方法内部来完成类似"+"功能,因为是线程不安全的,所以用完以后可以丢弃。StringBuffer主要用在全局变量中。
(5)相同情况下使用 StirngBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。而在现实的模块化编程中,负责某一模块的程序员不一定能清晰地判断该模块是否会放入多线程的环境中运行,因此:除非确定系统的瓶颈是在 StringBuffer 上,并且确定你的模块不会运行在多线程模式下,才可以采用StringBuilder;否则还是用StringBuffer。
相关推荐
String StringBuffer和StringBuilder 区别之源码解析 从源码角度简单对它们之间的区别进行了验证
String,StringBuffer,StringBuilder区别。几乎所有的应用开发都离不开操作字符串,理解字符串的设计和实现以及相关 工具如拼接类的使用,对写出高质量代码是非常有帮助的
StringBuffer:字符创变量 StringBuilder:字符创变量 从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问 ,比如这段代码:
String ,StringBuffer与StringBuilder的区别
String及StringBuffer和StringBuilder的区别
String、StringBuilder和StringBuffer的区别 String、StringBuilder和StringBuffer的区别 String、StringBuilder和StringBuffer的区别
介绍了String、StringBuffer、StringBuilder的使用方法,以及理论知识
简单的介绍了String、StringBuffer和StringBuilder的区别
Java中String,StringBuffer与StringBuilder的区别和用法。
目录StringStringBuffer与StringBuilder总结 String ...StringBuffer与StringBuilder 这两者基本相似,都是可变字符串对象,主要区别为线程是否安全。 总结 最后,引用菜鸟教程下的总结以及相关评论: S
string,stringbuffer,stringbuilder
String、StringBuffer 和 StringBuilder 的区别 碎碎念 简单认识这三个对象 String StringBuffer StringBuilder 深入理解 String、StringBuilder、StringBuffer 从设计角度理解 String StringBuilder StringBuffer ...
string,stringBuffer,stringBuilder
StringBuilder三者之间的区别是很有必要的,很多面试面试官都会问到这个知识点。集合网络上很多牛人的各种经典分析的总结,花了两个小时概括总结得出了现在这个最全面、最详细、最精辟、最透彻的解答。 不管是菜鸟...
下面小编就为大家带来一篇浅谈java中String StringBuffer StringBuilder的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
BATJ面试题讲解-String、StringBuffer、StringBuilder的区别
它们与String类类似,但是不同之处在于,StringBuffer和StringBuilder可以修改字符串内容,而String对象是不可变的; StringBuffer和StringBuilder类的用法基本相同,但StringBuilder类的效率更高,因为它不是线程...
主要介绍了Java 中 String,StringBuffer 和 StringBuilder 的区别及用法的相关资料,需要的朋友可以参考下
主要介绍了java 中String和StringBuffer与StringBuilder的区别及使用方法的相关资料,在开发过程中经常会用到String 这个类进行操作,需要的朋友可以参考下
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。 在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,...