Java之String+StringBuffer+StringBuilder
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java之String+StringBuffer+StringBuilder,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1613字,纯文字阅读大概需要3分钟。
内容图文
![Java之String+StringBuffer+StringBuilder](/upload/InfoBanner/zyjiaocheng/1119/30740f49cfb44bd3a623d2c4b3f074da.jpg)
Java中常用的字符串类有:String、StringBuffer、StringBuilder
1、String 是不可变的字符串(字符串常量),也是线程安全的。
String类的源码中组成字符串的数组是被 “ final ” 所修饰的, private final char value[]; 所以String中的对象是不可变的(可以理解为常量),因此它也是线程安全的。
String是不可变的,因此对String字符串的操作,实际上就是在不断的创建新的String对象,而原来的对象就会变为垃圾被GC回收掉,这样执行效率会很低。
2、StringBuffer 和 StringBuilder 是可变的字符串,其中StringBuffer是线程安全的,StringBuilder是非线程安全的。
如StringBuffer 和 StringBuilder 的类结构图所示:
二者都继承了公共的抽象父类AbstractStringBuilder,在 AbstractStringBuilder 的源码中也是使用字符数组保存字符串。char[] value; 因此二者都是可变的字符串。
StringBuffer 和 StringBuilder 是可变的,因为对此二者字符串的操作实际上是在一个对象上操作的,因此效率高于String。
StringBuffer 所有公开方法或被调用方法都加了同步锁(被synchronized修饰)所以StringBuffer 是线程安全的,
StringBuilder 并没有对方法加同步锁(没有被synchronized修饰)所以StringBuilder是线程不安全的。
StringBuffer 和 StringBuilder 的缓冲区结构:
StringBuffer 代码片段:
private transient char[] toStringCache;
@Override
public synchronized String toString() {
if (toStringCache == null) {
toStringCache = Arrays.copyOfRange(value, 0, count);
}
return new String(toStringCache, true); // 使用缓存区的 toStringCache 值来构造一个字符串
}
StringBuilder 代码片段:
@Override
public String toString() {
return new String(value, 0, count); // 直接复制一次字符数组来构造一个字符串
}
以上代码片段比较可以看出:缓存也是对 StringBuffer 的一个优化,不过StringBuffer 的toString 方法仍然是同步的。
3.StringBuffer 和 StringBuilder 和String的性能总结:
String 为字符串常量,一旦创建是不可变的,也是线程安全的。
StringBuffer 和 StringBuilder 为字符串变量,创建之后是可变的,
StringBuffer 是线程安全的,它所有的公开方法都加了同步锁,所以在多线程中使用性能更好。
StringBuilder是非线程安全的,它的方法都没有加同步锁(在多线程中有时会报错),StringBuilder在单线程中性能远高于StringBuffer。
所以 StringBuffer 更适用于在多线程操作中,StringBuilder 则适用于在单线程中操作,String适用于少量的字符串操作。
原文:https://www.cnblogs.com/java-1230/p/10286902.html
内容总结
以上是互联网集市为您收集整理的Java之String+StringBuffer+StringBuilder全部内容,希望文章能够帮你解决Java之String+StringBuffer+StringBuilder所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。