Java面试题:String 和 StringBuffer、StringBuilder 的区别是什么?
可变性
简单的来说:String 类中使用 final 关键字修饰字符数组来保存字符串,private final char value[],所以 String 对象是不可变的。而StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使用字符数组保存字符串char[]value 但是没有用 final 关键字修饰,所以这两种对象都是可变的。
StringBuilder 与 StringBuffer 的构造方法都是调用父类构造方法也就是 AbstractStringBuilder 实现的,大家可以自行查阅源码。
AbstractStringBuilder.java
java
abstract class AbstractStringBuilder implements Appendable, CharSequence {
char[] value;
int count;
AbstractStringBuilder() {
}
AbstractStringBuilder(int capacity) {
value = new char[capacity];
}
线程安全性
String 中的对象是不可变的,也就可以理解为常量,线程安全。AbstractStringBuilder 是 StringBuilder 与 StringBuffer 的公共父类,定义了一些字符串的基本操作,如 expandCapacity、append、insert、indexOf 等公共方法。StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。
性能
每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象。StringBuffer 每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用 StringBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。
对于三者使用的总结:
操作少量的数据: 适用String
单线程操作字符串缓冲区下操作大量数据: 适用StringBuilder
多线程操作字符串缓冲区下操作大量数据: 适用StringBuffer
免费领取Java精品面试题(面试必遇)
Java面试题:String 和 StringBuffer、StringBuilder 的区别是什么?相关推荐
- [JAVA基础类库] String类 ○ StringBuffer类 ○ StringBuilder类
引言 字符串就是一连串的字符序列,Java提供了String.StringBuffer和StringBuilder三个类来封装对字符串,并提供了系列方法来操作字符串对象. String类是不可变类的: ...
- 【面试常问】Java中String和StringBuffer、StringBuilder的区别是什么?
String和StringBuffer.StringBuilder的区别是什么? 在面试中我们经常会被问到这个问题,包括我自己也掉到坑里了:我就做一个记录分享出来! 文章目录 String和Strin ...
- java中的String、StringBuffer和StringBuilder的详细分析
目录 前言 1. 源码 1.1 String源码 1.2 StringBuffer源码 1.3 StringBuilder源码 2. 总结 前言 java中用于处理字符串常用的主要三个类 在开发中如何 ...
- Java中的String、StringBuffer、StringBuilder的区别和使用范围
String String不可随便更改,把他当做常量就行. 但是String可以通过函数组合或者用format创建可复用的格式化字符串. StringBuffer.StringBuilder 想要多次 ...
- java笔试题String字符串单词逆序how are you变成are you how
今儿去面java,笔试上来六个编程大题也是醉了,两页纸全是英文也是棒棒哒...好多字符串方面的,其实还是挺简单的,但是有些方法感觉有点忘了......总之看面试官看我代码的表情我也是醉了.... 大概 ...
- Java面试题 String类能不能被继承?为什么?
不能,因为string类是被final修饰的类,final修饰过的类不能被继承.final修饰过的变量不能被修改.
- 二十一、String、StringBuffer和StringBuilder的区别是什么?
@Author:Runsen @Date:2020/5/25 大家都知道字符串的不可变的,如果需要对字符串进行修改的时候,那么就需要使用 StringBuffer 和 StringBuilder 类. ...
- java stringbuffer长度限制_Java中的String、StringBuffer和StringBuilder
作为作为一个已经入了门的java程序猿,肯定对Java中的String.StringBuffer和StringBuilder都略有耳闻了,尤其是String 肯定是经常用的.但肯定你有一点很好奇,为什 ...
- 吐血整理 这200道阿里P6必备Java面试题,我简直太爱了
前言 梳理了好久,总算是把面试题全部导出来了,毕竟还要上班,这次就给大家总结了一些Java开发岗位的经典面试题. 篇幅较大,阅读过程中可能会有点繁琐! 但请细细观看,文章末尾有留给大家的小惊喜!!! ...
最新文章
- nginx 常用命令 和 配置
- 设计模式之创建型模式
- 7.0、Android Studio命令行工具
- P3387-【模板】缩点【tarjan,强联通分量,DAGdp】
- 图书馆管理系统——还书和延期操作
- C语言如何处理不定长度参数,C语言中不定参数的实现
- 解决思维导图软件Mindmanager Mindjet连接出错
- 通过SQL语句删除重复记录
- python怎么计算圆上任意两点的距离_圆周上两点距离-python
- 【操作基本数据类型的流】
- lr_save_var() 截取任意字符串长度,以参数形式输出(参数转变量)
- 记忆不可靠,要相信证据:我明明已经提交了
- hive循环语句_Hive 如何方便地实现存储过程?
- win10设置HTML桌面背景,Win10系统直接将视频设置为桌面背景的方法
- mySQL数据库学习的一些心得
- Android 7 soter,开通微信人脸支付 OPPO Find X 成首发安卓手机
- python绘制折线图怎么样填充空白颜色_两条折线图之间填充颜色
- android手机怎么投屏到电视盒子,手机钉钉怎么投屏到电视上
- 娃娃机共享扫码平台开发
- [转贴]拓展人脉的老派艺术
热门文章
- [转载] comma.ai自动驾驶代码浅析及实践
- centos7卸载旧jdk安装新jdk1.8
- 047 Permutations II 有重复数字的全排列
- [妙味Ajax]第三课:AJAX跨域解决方案:JSONP
- sip协议的功能及其应用
- jupyter notebook + 服务器中docker 使用配置
- python 词云 fontpath_Python酷炫词云图原来可以这么玩?
- dpf linux安装db2_值得一看!数据库及Mysql入门,附详细安装教程
- java面向对象_谈谈Java的面向对象
- python3 安装PIL