闲聊String、StringBuffer、StringBuilder那些事!面试必备!!

浅谈 String s = “hello” 与 String s = new String(“hello”) 的区别

String s = “hello” 与 String s = new String(“hello”) 都在编译期间生成了字面常量和符号引用,运行期间字面常量 “hello” 被存储在运行时常量池中。通过这种方法来将 String 对象跟引用绑定的话,JVM执行引擎会先在运行时常量池查找是否存在相同的字面常量,如果查找,则直接将引用指向已经存在的字面常量;否则在运行时常量池开辟一个空间来存储字面常量,并将引用指向该字面常量。

通过 new 关键字来生成对象是在堆区进行的,而在堆区进行对象生成的过程是不会检测该对象是否已经存在的。因此通过 new 来创建对象,创建出的一定是不同的对象。

StringBuffer 与 StringBuilder 的区别

String 不擅长字符串频繁的增删,它每次会 new 出一个 StringBuilder 对象,然后进行 append 操作,通过 toString 方法返回 String 对象,造成资源的浪费。StringBuffer 与 StringBuilder 拥有的成员属性以及成员方法基本相同,区别是 StringBuffer 类的成员方法前面多了一个关键字:synchronized,作用是在多线程访问的时候起到安全保护作用的,也就是说 StringBuffer是线程安全的。

String、StringBuffer 与 StringBuilder 三者的执行效率

StringBuffer > StringBuilder > String

String、StringBuffer 与 StringBuilder 三者的使用场景

1、当字符串相加操作或者改动较少的情况下,建议使用 String str = “” 这种形式定义变量;

2、当字符串相加操作较多的情况下,建议使用 StringBuilder;

3、如果采用了多线程,则使用 StringBuffer。

加入小猿QQ群:947117563,一起闲聊java那些事!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值