String,StringBuffer和StringBuilder的区别
一、可变性
不同于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的区别相关推荐
- String,StringBuffer与StringBuilder的区别
String,StringBuffer与StringBuilder的区别 String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全 ...
- String,StringBuffer与StringBuilder的区别??
2019独角兽企业重金招聘Python工程师标准>>> String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全 ...
- String,StringBuffer与StringBuilder的区别?
http://blog.csdn.net/rmn190/article/details/1492013 String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuil ...
- String,StringBuffer与StringBuilder的区别以及String为什么是不可变的?
String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要 ...
- php 有 stringbuffer,string,stringbuffer以及stringbuilder的区别
string,stringbuffer以及stringbuilder的区别? 小编在一次电话面试中,被问过StringBuilder是线程安全的吗,脱口而出是安全的,结果人家质疑我你是2年开发经验吗. ...
- JavaSE(二十五)——String与StringBuffer、StringBuilder的区别、创建对象的几种方法、Http和Https的区别
文章目录 1. String与StringBuffer.StringBuilder的区别 2. Java创建对象的几种方法 3. Http和Https的区别 1. String与StringBuffe ...
- String、StringBuffer和StringBuilder的区别
String.StringBuffer和StringBuilder的区别: 文章目录 String StringBuffer StringBuilder StringBuffer是如何实现线程安全的呢 ...
- Java中String StringBuffer和StringBuilder的区别是什么
String StringBuffer 和 StringBuilder 的区别是什么?String 为什么是不可变的? 可变性 简单的来说:String 类中使用 final 关键字修饰字符数组来保存 ...
- Java 之String、StringBuffer 和 StringBuilder 三者区别介绍
String:字符串常量,字符串长度不可变,StringBuffer:字符串变量(Synchronized,即线程安全),StringBuilder:字符串变量(非线程安全). String Stri ...
最新文章
- JVM_01 总体概述
- Scala模式匹配:变量声明中的模式匹配
- 交换机端口灯闪烁频率一样_思创易控cetron-新品S2024GE 24口全千兆非网管交换机即将上市!...
- 从证书中导出公钥并存放到项目中
- 【医疗】疫情下的医院信息化短板如何补足?
- jmeter 跳板机_Jmeter接口测试进阶
- Netty学习笔记(一) 实现DISCARD服务
- mysql多表in查询_MySQL多表查询
- 管家婆财贸双全TOP系列服务器,管家婆财贸双全II
- TCP 实战抓包分析
- python pip下载安装一半退出_【Python】pip安装numpy安装到一半失败解决办法
- 如何删除“无法删除文件,无法读取源文件或磁盘”文件
- 公众号被封小感:你是否拥有绝地反击的能量?
- java gif等比例缩放_对gif动图进行缩放等处理(java)
- java转go之初体验(一)
- Java POI SXSSFWorkbook 读取模板,输出
- 苹果M1芯片的Mac怎么关闭SIP?M1 mac关闭Sip方法教程!
- 2016中国国际石墨烯创新大会展商名录抢先看
- 普冉PY32系列(三) PY32F002A 资源实测 - 这个型号不简单
- EXE4J_JAVA_HOME错误