String,StringBuffer,StringBuilder

本文详细解析了Java中String、StringBuilder和StringBuffer的区别,重点介绍了它们的底层实现原理,包括不变性和线程安全性,以及在不同场景下的使用建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java中的String,StringBuilder,StringBuffer三者的区别

大家好,相信很多入行的小伙伴们面试都会碰到这个古老的面试题,其实初入职的来说,不知道底层原理很正常,至少要会用,然后还是要探究一底层原理的。我个人提倡以结果反推原理,毕竟我们是面向对象的嘛……
下面我只想以最简单的结论或者说是定义的形式做下这道面试题的解答:
String:JDK1.0中就有了,底层利用字符数组保存字符串常量。长度不可变 , 每次都是新建一个对象。
              原码中有: private final char value[]; 因为有final修饰,所以不可变
StringBuffer:JDK1.0中就有了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,其实是改变了对象的引用。
StringBuilder:JDK1.5推出的类。用法和StringBuffer相似,区别在线程安全上。

对比源码
在这里插入图片描述
可以看出:StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的;而StringBuilder没有该关键字(此处源码不再截图),所以线程不安全。
大家也可以看下这位博主的总结,写的很好[https://www.cnblogs.com/su-feng/p/6659064.html]
他从执行速度和线程安全做了详细的条理化的分析,也是我学习的模范。
我也是看着对应着源码,加深记忆。希望对迷惘的朋友们有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值