• String、StringBuffer、StringBuiled的区别与联系


    String:字符常量

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

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

     

    String类型和StringBuffer类型的主要区别:

    String是不可变的对象,因此在每次对String类型进行改变的时候等同于生成了一个新的String对象,然后将指针指向新的String对象,所有经常改变内容的字符串最好不要使用String,因为每次生成对象都会对系统性能产生影响。

     

    StringBuffer是线程安全的可变字符序列:如果对StringBuffer类型改变,每次结果都会对StringBuffer对象本身进行操作,而不是生成新的对象,在改变对象的引用。因此在经常改变字符串对象的情况下,推荐使用StringBuffer。

    StringBuilder是一个可变字符序列。此类提供一个与StringBuffer兼容的API,但不保证同步。该类被设计用作StringBuffer的一个简易替换,用字字符串缓冲区被单个线程使用的时候。如果可能,建议有限采用该类,因为在大多数实现中,他比StringBuffer要快。

     

    StringBuilder类型和StringBuffer类型的共同点

    都是应用操作字符串,使用这两二不使用String的原因是String是Final类,当对字符串操作较多是采用StringBuffer或者StringBuilder。StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象

     

    StringBuilder类型和StringBuffer类型的区别:

    1.StringBuffer是单线程的,因为里面的方法都被synchronized修饰了,所有是线程安全的,但是效率自然就降低。

    2. StringBuilder不是是单线程的,因为里面的方法没有被synchronized修饰了。所以它线程不安全,所以效率要更高。

     

    为什么String是Final类型,确可以进行+等操作呢?

    答:因为String的+操作实际是通过StringBuffer的append方法进行操作,然后又通过StringBuffer的toString()操作重新赋值的。

     

    三者的继承结构:

     

  • 相关阅读:
    hadoop安装前的准备
    记录一次Qt5程序无法运行的解决过程
    C#里的Thread.Join与Control.Invoke死锁情况
    qbxt7月笔记
    zhxのDP讲
    有n*m的方格图
    最长上升子序列相关问题笔记
    qbxt游记(清北澡堂划水记
    DAZの七下道法(持续更新
    模板
  • 原文地址:https://www.cnblogs.com/qqiua/p/9416572.html
Copyright © 2020-2023  润新知