String、StringBuilder、StringBuffer的区别

目录

(1)String:

(2)StringBuilder类和StringBuffer类:

(3)三者的相同点和不同点:

(4)总结:


(1)String:

         String是一个长度不可变的字符序列,底层是一个被final修饰的char[]数组来实现的,所以说,任何对 String 类型进行改变的操作实际上都是重新生成了一个新的String对象,然后将指针指向新的 String 对象,(也就是我们之前讲的说String对象创建后不可改变),这样不仅效率低下,而且大量浪费有限的内存空间,所以经常改变内容的字符串最好不要用 String。

(2)StringBuilder类和StringBuffer类:

        这两个的底层也是用char[]数组来实现的,与String类不同StringBuilder类 和 StringBuffer类的对像的实体的内存空间是可以自动地改变大小,以便于从从存储一个可变地序列,他们两个都是长度可变的字符序列,他们创建的时候如果不带参数的话,那么默认的长度就是16,如果带参数的话,那么长度就是16+参数。

(3)三者的相同点和不同点:

       相同点                                    不同点
String      底层char[] String对象一旦创建,其值是不能修改的,如果要修改,会重新开辟内存空间来存储修改之后的对象;而StringBuffer和StringBuilder对象的值是可以被修改的。
StringBuffer      底层char[] StringBuffer几乎所有的方法都使用synchronized实现了同步,线程比较安全,在多线程系统中可以保证数据同步,但是效率比较低。
StringBuilder      底层char[] StringBuilder 没有实现同步,线程不安全,在多线程系统中不能使用 StringBuilder,但是效率比较高。

(4)总结:

1、String是变长度的字符串,而StringBuffer和StringBuilder是可变长度的字符串。

2、在对String类进行操作的时候(例如增加字符),实际上是在内存中产生了一个新的String对象; 而StringBuffer和StringBuilder是给原对象增加字符,不是新创建一个对象。

3、Stringbuffer是线程安全的,效率低---->适用于多线程操作字符串缓冲区下操作大量数据,而Stringbuilder是非线程安全的----->适用于单线程操作字符串缓冲区下操作大量数据。

       

你可能感兴趣的:(java学习,java)