String、String Buffer、String Builder 有啥子区别?

本贴最后更新于 1634 天前,其中的信息可能已经沧海桑田

String、String Buffer、String Builder 有啥子区别?

  • jdk 1.8

String

String 类 是我们平时用的最多的一个类,它提供了构造和管理字符串的各种基本逻辑。

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];

通过查看源码,String 类被声明为 final class ,属性也为 final 的,所以 String 类是典型的 Immutable 类(即不可变类),也可理解为常量,所以 String 是线程安全的。
由于 String 类的不可变性,所有对字符串的裁剪、拼接操作都会产生 新的 String 对象 ,然后将指针指向新的 String 对象。

AbstractStringBuilder

String BufferString Builder 都继承了 AbstractStringBuilder 。

abstract class AbstractStringBuilder implements Appendable, CharSequence {
    char[] value;
    int count;
    AbstractStringBuilder() {
    }
    AbstractStringBuilder(int capacity) {
        value = new char[capacity];
    }

通过查看 AbstractStringBuilder 的源码可以看到,该类没有被声明为 final,
所以 String BufferString Builder 都是为了解决上述所说的拼接、裁剪产生的太多中间对象而提供的俩个类,我们可以用 append 或者 add 方法,把字符串添加到已有序列的末尾或者指定位置。
String BufferString Builder 二者的方法是完全一样的,唯一的区别就是 String Buffer 中所有的方法都简单粗暴的被 synchronized 关键字修饰,而 String Builder 中没有,这也就造成了二者性能上的差异,所以说如果没有线程安全上的需要,还是用 String Builder 比较好。

如何在三者之间选择?

  1. 操作少量字符串,适用 String
  2. 单线程在字符串缓冲区下操作大量数据,适用 String Builder
  3. 多线程在字符串缓冲区下操作大量数据,适用 String Buffer

总而言之,就是简单操作字符串的话用 String 就好,拼接字符串数据量大的话一般用 StringBuilder,如果涉及多线程了,就用 String Buffer

格式化输出

System.out.format()

System.out.format() 模仿自 c 的 printf()来进行格式化输出,如下所示

int x = 5;
double y = 5.222;
System.out.println("Row 1:" + x + y);
System.out.format("Row 1: %d , %f\n" , x , y);
System.out.printf("Row 1: %d , %f\n" , x , y);

format()与 printf()是等价的。

String.format()

String.format() 以生成格式化的 String 对象,同上述 System.out.format()方法一样,但返回一个 String 对象。
String sql = String.format("select * from %s where id in (%s) ",x,y)
可以像这样拼接字符串,而不用非要用 String Builder 来一点一点的 append。

以上内容参考自:

由于 jvm 和并发编程还没学,一些东西还不懂,等过段时间再补充补充

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3165 引用 • 8206 回帖
  • 字符串
    28 引用 • 57 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...