zoukankan      html  css  js  c++  java
  • 【JAVA】辨析:String,StringBuffer与StringBuilder

    参考链接:

    1. Java String 类:字符串常量

    • 字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。

    • 需要注意的是,String的值是不可变的,这就导致每次对String的操作都可能生成新的String对象,这样不仅效率低下,而且大量浪费有限的内存空间。

      • 对string重新赋值,如果字符串常量池不存在这个新的赋值对象,就会创造新的对象,如果存在,就不会创建
    • String操作时内存变化的图:

    2. StringBuffer 和 StringBuilder 类:字符串变量

    • 当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。

    • 和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

    • StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。

    • 由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

    3. 辨析

    • 继承结构:

    • 字符修改上的区别

      • String:不可变字符串;

      • StringBuffer:可变字符串、效率低、线程安全;

      • StringBuilder:可变字符序列、效率高、线程不安全;

    • 三者在执行速度方面的比较:

      • StringBuilder > StringBuffer > String
    • 初始化上的区别(大雾,其实差不多)

      • 都可以赋空值null,亲测不报错;

      • 都可以通过new的形式创建空对象,此时打印什么都不输出(null也不输出)

    • 关于初始化的补充

    • 小结:

      • (1)如果要操作少量的数据用 String;

      • (2)多线程操作字符串缓冲区下操作大量数据 StringBuffer;

      • (3)单线程操作字符串缓冲区下操作大量数据 StringBuilder(推荐使用)。

    • 表格

    String StringBuffer StringBuilder
    String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间 StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量 可变类,速度更快
    不可变 可变 可变
    线程安全 线程不安全
    多线程 操作字符串 单线程 操作字符串

    END

  • 相关阅读:
    韩式英语
    Daily dictation 听课笔记
    words with same pronunciation
    you will need to restart eclipse for the changes to take effect. would you like to restart now?
    glottal stop(britain fountain mountain)
    education 的发音
    第一次用Matlab 的lamada语句
    SVN的switch命令
    String的split
    SVN模型仓库中的资源从一个地方移动到另一个地方的办法(很久才解决)
  • 原文地址:https://www.cnblogs.com/anliux/p/12286392.html
Copyright © 2011-2022 走看看