一、可变性

不同于String类的不可变性,StringBuffer和StringBuilder都继承了抽象类AbstractStringBuilder,这个类用一个char数组来存储value。

abstract class AbstractStringBuilder implements Appendable, CharSequence {/*** The value is used for character storage.*/char[] value;
}

而String是用final修饰的char数组

public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence {/** The value is used for character storage. */private final char value[];
}

二、线程安全

String中的对象是不可变的,也就是常量,所以是线程安全的。StringBuffer也是线程安全,是因为StringBuffer的所有可显示调用的方法都加了synchronize关键字,即同步锁,而StringBuilder没有。

public final class StringBufferextends AbstractStringBuilderimplements java.io.Serializable, CharSequence
{...@Overridepublic synchronized StringBuffer append(String str) {toStringCache = null;super.append(str);return this;}...
}

三、性能

每次对String对象进行操作的时候,都会生成一个新的String对象,然后将指针指向新的String对象。而StringBuffer和StringBuilder都是对对象本身进行操作。相同情况下使用StringBuilder 相比使用 StringBuffer仅能获得10%~15%左右的性能提升,但却要冒多线程不安全的风险。

四、总结

操作少量数据时:用String
单线程操作大量数据时:用StringBuilder
多线程操作大量数据是:用StringBuffer

转载于:https://www.cnblogs.com/fantasyfc/p/11245908.html

String,StringBuffer和StringBuilder的区别相关推荐

  1. String,StringBuffer与StringBuilder的区别

    String,StringBuffer与StringBuilder的区别 String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全 ...

  2. String,StringBuffer与StringBuilder的区别??

    2019独角兽企业重金招聘Python工程师标准>>> String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全 ...

  3. String,StringBuffer与StringBuilder的区别?

    http://blog.csdn.net/rmn190/article/details/1492013 String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuil ...

  4. String,StringBuffer与StringBuilder的区别以及String为什么是不可变的?

    String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要 ...

  5. php 有 stringbuffer,string,stringbuffer以及stringbuilder的区别

    string,stringbuffer以及stringbuilder的区别? 小编在一次电话面试中,被问过StringBuilder是线程安全的吗,脱口而出是安全的,结果人家质疑我你是2年开发经验吗. ...

  6. JavaSE(二十五)——String与StringBuffer、StringBuilder的区别、创建对象的几种方法、Http和Https的区别

    文章目录 1. String与StringBuffer.StringBuilder的区别 2. Java创建对象的几种方法 3. Http和Https的区别 1. String与StringBuffe ...

  7. String、StringBuffer和StringBuilder的区别

    String.StringBuffer和StringBuilder的区别: 文章目录 String StringBuffer StringBuilder StringBuffer是如何实现线程安全的呢 ...

  8. Java中String StringBuffer和StringBuilder的区别是什么

    String StringBuffer 和 StringBuilder 的区别是什么?String 为什么是不可变的? 可变性 简单的来说:String 类中使用 final 关键字修饰字符数组来保存 ...

  9. Java 之String、StringBuffer 和 StringBuilder 三者区别介绍

    String:字符串常量,字符串长度不可变,StringBuffer:字符串变量(Synchronized,即线程安全),StringBuilder:字符串变量(非线程安全). String Stri ...

最新文章

  1. JVM_01 总体概述
  2. Scala模式匹配:变量声明中的模式匹配
  3. 交换机端口灯闪烁频率一样_思创易控cetron-新品S2024GE 24口全千兆非网管交换机即将上市!...
  4. 从证书中导出公钥并存放到项目中
  5. 【医疗】疫情下的医院信息化短板如何补足?
  6. jmeter 跳板机_Jmeter接口测试进阶
  7. Netty学习笔记(一) 实现DISCARD服务
  8. mysql多表in查询_MySQL多表查询
  9. 管家婆财贸双全TOP系列服务器,管家婆财贸双全II
  10. TCP 实战抓包分析
  11. python pip下载安装一半退出_【Python】pip安装numpy安装到一半失败解决办法
  12. 如何删除“无法删除文件,无法读取源文件或磁盘”文件
  13. 公众号被封小感:你是否拥有绝地反击的能量?
  14. java gif等比例缩放_对gif动图进行缩放等处理(java)
  15. java转go之初体验(一)
  16. Java POI SXSSFWorkbook 读取模板,输出
  17. 苹果M1芯片的Mac怎么关闭SIP?M1 mac关闭Sip方法教程!
  18. 2016中国国际石墨烯创新大会展商名录抢先看
  19. 普冉PY32系列(三) PY32F002A 资源实测 - 这个型号不简单
  20. EXE4J_JAVA_HOME错误

热门文章

  1. 邮件附件在线预览——HTML Filter
  2. SQL关闭自增长列标识:SET IDENTITY_INSERT
  3. 车载360度全景监视系统
  4. 语音识别系统及科大讯飞最新实践
  5. 移除 RSA-4096 Ransomware
  6. shell 语法格式
  7. 适用于System Center 2016所需前期准备工作
  8. cocos2dx 大地图分块加载的研究(初)
  9. 读文件夹下所有文件,并提取中文字符
  10. C语言中关于字符串常量的进一步分析 转