文章标题:String,StringBuilder,StringBuffer

  1. 三者在执行速度方面的比较:StringBuilder > StringBuffer > String
    当然这个是相对的,不一定在所有情况下都是这样。
    比如String str=”hello”+”world”的效率就比 StringBuilder st=new StringBuilder().append(“hello”).append(“world”)要高
  2. 关于String:


    • String类是final类,也即意味着String类不能被继承,并且它的成员方法都默认为final方法。在Java中,被final修饰的类是不允许被继承的,并且该类中的成员方法都默认为final方法。
    • String类其实是通过char数组来保存字符串的
    • String是“字符创常量”,也就是不可改变的对象,因此String类的方法实现都不是在原有的字符串上进行的,而是重新生成了一个新的字符串对象。也就是说进行这些操作后,最原始的字符串并没有被改变。
      在这里要永远记住一点:
        “对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象”

    • 一个小例子:
      String str1 = “hello world”;
      String str2 = new String(“hello world”);
      String str3 = “hello world”;
      String str4 = new String(“hello world”);
      在这里(str1==str3) but (str2!=str4)

      这是因为通过new关键字来生成对象是在堆区进行的,而在堆区进行对象生成的过程是不会去检测该对象是否已经存在的。因此通过new来创建对象,创建出的一定是不同的对象,即使字符串的内容是相同的。

  3. 关于StringBuffer与StringBuilder


    • StringBuilder类是在JDK5.0中引入的,这个类的前身是Stringbuffer,StingBuffer其效率稍有些低,但允许采用多线程的方式执行
    • StringBuilder:线程非安全的
      StringBuffer:线程安全的,
      可以查看源码发现每个方法都用synchronized关键字声明了
      当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。
      添加或删除字符的操作。

  4. 对于三者使用的总结:

    • 如果要操作少量的数据用 String
    • 单线程操作字符串缓冲区 下操作大量数据 用StringBuilder
    • 多线程操作字符串缓冲区 下操作大量数据 用StringBuffer
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值