• String、StringBuffer和StringBuilder类的区别


    1.可变与不可变

    1.1String类是一个不可变类即创建String对象后,该对象中的字符串是不改变的,直到这个对象别销毁。

    1.2StringBuffer与StringBuilder都继承自AbstractStringBuilder类在AbstractStringBuilder中也是使用字符数组保存字符串,即是可变类

    1.3由于String是可变类,适合在需要被分享的场合中使用,当一个字符串经常被修改时,最好使用StringBuffer实现。如果用String保存一个经常被修改的字符串,该字符串每次修改时都会创建新的无用的对象,这些无用的对象会被垃圾回收器回收,会影响程序的性能,不建议这么做。

    2.初始化方式不同

    当创建String对象时,可以利用构造方法String str = new String("Java")的方式来对其进行初始化,也可以直接用赋值的方式String s = "Java"来初始化。而StringBuffer只能使用构造方法StringBuffer sb = new StringBuffer("hello")的方式初始化。

    3.字符串修改方式

    String字符串修改方法是首先创建一个StringBuffer,其次调用StringBuffer的append方法,最后调用StringBuffer的toString()方法把结果返回,示例代码如下:

    String str = "hello";
    str += "java";

    以上的代码等价于下面的代码

    StringBuffer sb = new StringBuffer(str);
    sb.append("java");
    str = sb.toString();

    4.是否实现了equals和hashCode方法

    String实现了equals()方法和hashCode()方法,new String("java").equals(new String("java"))的结果为true;

    而StringBuffer没有实现equals()方法和hashCode()方法,因此,new StringBuffer("java").equals(new StringBuffer("java"))的结果为false,将StringBuffer对象存储进Java集合类中会出现问题。

    5.是否线程安全

    StringBuffer与StringBuilder都提供了一系列插入、追加、改变字符串里的字符序列的方法,它们的用法基本相同,只是StringBuilder是线程不安全的,StringBuffer是线程安全的,。如果只是在单线程中使用字符串缓冲区,则StringBuilder的效率会高些,但是当多线程访问时,最好使用StringBuffer。

    综上,在执行效率方面,StringBuilder最高,StringBuffer次之,String最低,对于这种情况,一般而言,如果要操作的数量比较小,应优先使用String类;如果是在单线程下操作大量数据,应优先使用StringBuilder类;如果是在多线程下操作大量数据,应优先使用StringBuilder类。

  • 相关阅读:
    流量分析 (WireShark)
    WEB小技俩
    PHP伪协议
    php弱类型基础
    宽字节注入
    布尔盲注
    时间盲注
    Odoo13教程-Odoo快捷键使用_江苏欧度软件
    Odoo,快速上手Odoo,来了解Odoo几个标准模块
    开源Odoo13更新的模块功能信息(译文)
  • 原文地址:https://www.cnblogs.com/Hiramunderneath/p/15417727.html
Copyright © 2020-2023  润新知