StringBuilder和StringBuffer的区别

3 篇文章 0 订阅
1 篇文章 0 订阅

看了网上不少关于StringBuilderStringBuffer的区别,于是自己也想写一份文章做一下两者之间的总结。



在这之前先来说说String(字符串常量) 它是引用类型 值不可变的(被final修饰,不可被继承),也就是说String对象一旦创建之后就不允许更改,每对String做一次修改,它都会返回一个新的String对象,实际上是又创新了一个新的对象。

final意义:最终的,不可改变的。
  1、修饰变量,为常量,值不可变;
  2、修饰对象,值可变,引用不变;
  3、修饰方法,方法不可重写;
  4、修饰类,无子类,不可以被继承,更不可能被重写。


如下图所示:

先创建一个对象s2,将"hello"存到常量池中,同理,因此s2==s3为true 因为s2/s3这两个变量指向的是同一个对象。

常量池:专门用于管理在编译时被确定并被保存在已编译的.class文件中的一些数据。如字符串常量,类、方法中的常量。

而s4是new了一个新的对象,将"hello"存放到堆中,因此s2==s4为false。

: s2==s3比较的是地址  s2.equals(s4)比较的是字符串内容


现在我们切入正题具体说说StringBuilder 和StringBuffer的区别:

    StringBuilder和StringBuffer都是继承自AbstractStringBuilder,AbstractStringBuilder都是用字符数组来存储数据的,因此对象可变。

StringBuilder与StringBuffer的区别:

    1:两者的方法功能大致相同

    2:只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,

而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。 

    3:在单线程程序下,StringBuilder效率更快,因为它不需要加锁,不具备多线程安全

而StringBuffer则每次都需要判断锁,效率相对更低.


那么,我们什么时候需要用到String,什么时候用到StringBuilder,String Buffer呢?

这里做出以下总结:

        String:适用于少量的字符串操作的情况

  StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

  StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况


    


            

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值