String、StringBuffer、StringBuilder区别

1.String 字符串常量

String这个类被final修饰,当我们每次改变String值时,每次改变都等同于生成
一个新的String,然后指针指向新的String。所以我们频繁的改变String值时,
会频繁的生成新的对象,生成多的无用对象后,jvm就开始gc回收无用的对象,
速度就会变慢。
基于这种情况,String中引入了常量池,String s = “123” ; 这种String的赋值方式,会先从常量池中查找是否存在值相同的字符串,如果存在则不创建,直接从常量池中取出;如果不存在,则新建字符串,并放入常量池中。
但是:String s = new String(“123”);像这种情况不会去检查常量池,而是直接在堆中创建一个新的对象,当然也不会添加到常量池中。

注意: public native String intern();这个方法的返回值是

a string that has the same contents as this string, but is guaranteed to be from a pool of unique strings.

意思是:如果常量池中存在常量,则返回一个唯一的常量。如果没有,则返回 ” “

2.StringBuffer 字符串变量(线程安全)

    当使用StringBuffer时,频繁改变字符串时,改变的是StringBuffer本身,
不会生成新的对象。StringBuffer是一个类似与String的字符串缓冲区,可以安全
的作用于多个线程,在必要的时机进行同步。所有的操作就好像串行顺序发生的,顺序
与所涉及的每一个线程调用方法的顺序一致。

3.StringBuilder字符串变量(非线程安全)

      StringBuidler是StringBuffer的一个简单的替换,用在字符串缓冲区被单
  个线程使用。在大部分情况下,StringBuilder会比StringBuffer速度快。

注意:StringBuilder和StringBuffer都继承AbstractStringBuilder这个类,存储的底层是一个char数组,默认的大小是16个字符.
StringBuilder与StringBuffer相比就是其中一些方法没有被synchronize修饰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值