Java菜鸟起飞日记-每天五分钟(Java面试一)

String,StringBuffer,StringBuilder的理解与区别

分享一道面试实习生或者初级开发常问的一道基础的面试题,我想题目大家已经看到了,那么此题何解呢?

大家很常用的就是String,可能对于初学者或者说刚入门的老铁们,基本上完全不用StringBuilder、StringBuffer。
但事实上它们的存在都是有意义的。

首先我们在执行以下的代码时:

String s = "a";
s = s + b;

这两句简单的代码,谁都会写,但是效率却低到了一个地步,因为String的机制问题,大家应该知道常量池的概念,这种执行的方式是,首先常量池会创建一个“a”,然后会创建一个“b”,再创建一个“ab”,而对象则也对应的创建了三次,因为在String操作的时候,首先创建了一个对象为“a”,然后又创建了一个s对象,在结合的时候又成了一个新的s对象,每执行一次,之前的s对象就会被GC给回收掉。因此就这么一个简单的“a”+“b”,String的效率基本低到了谷底,这就是String叫字符串常量的原因。

那么StringBuilder,StringBuffer呢?

这两个都叫做字符串变量,在需要改变字符串的值的时候,都是在自己的对象本身上改变,不会像String一样,每次改变都会新增对象。所以效率要高很多很多。但是这两者虽都是字符串变量,但也是有区别的。StringBuilder速度更快,但是线程不安全。相反,StringBuffer就属于线程安全,速度稍慢。

这下你知道这三者的区别了吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值