【Java面试】毕业季高频面试题String,StringBuffer好和StringBuilder的区别
可能是因为毕业季,最近有非常多的应届生来咨询我面试相关的问题。这不,今天有一位应届生找到我,说面试被问到这样一道面试题:请谈谈String、StringBuffer和StringBuilder的区别。其实呢,这是一道老生常谈的题,光背八股文还是非常简单的。
既然,大家有这方面的需求,今天我还是给大家分享一下我的理解。
关于String、StringBuffer、StringBuilder的区别,我从以下四个方面来理解:
1、值可变性方面
ENTER TITLE
String内部的value值是final修饰的,所以它是不可变类。因此,每次修改String的值,都会产生一个新的对象。
而StringBuffer和StringBuilder是可变类,它们在字符串变更的时候,不会产生新的对象。
2、线程安全方面
ENTER TITLE
String是不可变类,所以它是线程安全的。
StringBuffer是线程安全的,因为它每个操作方法都加了synchronized同步关键字。
而StringBuilder不是线程安全的。如果在多线程环境下对字符串进行操作,建议使用StringBuffer,单线程情况下,才建议使用StringBuilder。
3、性能方面
ENTER TITLE
String的性能是最低的,因为它不可变,意味着在做字符串拼接和修改的时候,需要反复地重新创建新的对象和分配内存。
其次是StringBuffer,它要比String性能高,因为它的可变性使得字符串可以直接被修改。
性能最高的是StringBuilder,因为StringBuffer加了同步锁,而StringBuilder是无阻塞的。
4、数据存储方面
ENTER TITLE
String存储在字符串常量池中,而StringBuffer和StringBuilder存储在堆内存空间。
最后再补充一下, StringBuilder和StringBuffer都是派生自AbstractStringBuilder这个抽象类。
以上就是我对String、StringBuffer和StringBuilder的理解。
相关文章
- [PHP] 算法-数组归并排序并计算逆序对的个数的PHP实现
- [PHP] 算法-原址排序数组使奇数位于偶数前面的PHP实现
- 从源码角度解析线程池中顶层接口和抽象类
- Apache HBase MTTR 优化实践:减少恢复时长
- 低代码:时代的选择
- AI+云原生,把卫星遥感虐的死去活来
- 基于昇腾CANN的卡通图像生成可在线体验啦!十分钟带你了解CANN应用开发全流程
- 什么是强化学习?
- 高可用架构演进之单元化
- AOC萌新探索:搭建和体验在线AOC环境
- 如何将知识引入机器学习模型提升泛化能力?
- 零代码以“王者荣耀”为例解析设计七原则
- 高并发中,那些不得不说的线程池与ThreadPoolExecutor类
- “互联网+”大赛之智慧校园 赛题攻略:你的智慧校园,WeLink帮你来建
- 云小课 | 网络知识一箩筐——NAT网关,让IP地址华丽变身,轻松实现内外网互通
- 跟我读论文丨ACL2021 NER 模块化交互网络用于命名实体识别
- 4种基于像素分割的文本检测算法
- U2Net基于ModelArts Notbook的仿真实验
- 七夕赶上服务器架构升级,女朋友的约会怎么办
- 在openEuler上做开发?这个大赛拿出30万寻找开源的yyds