欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

探讨String、StringBuffer和StringBuilder类之间的异同

程序员文章站 2022-04-22 21:50:05
...

1、String对象是不可变的,但引用变量是可变的。

 

2、如果创建了新的String而没有给它赋值,则对程序来说它是丢失的。

 

3、如果将String的引用变量指向了新的对象,在旧的对象可能丢失(看没有其他引用指向)。

 

4、String类是最终类,意味着其所有的方法都不能被覆写。

 

5、当JVM发现字符串的字面值时,会将它添加到String字面值池中,比如:

    1)String s="ab",则会将"abc"放入常量池中,并由s引用它。

    2)String s =new String("cd"),则会创建两个对象,一个在堆内存中(并由s引用它),一个放入常量池中(没有引用指向,但占用了内存)。

 

6、StringBuffer:线程安全的可变的字符串序列。

 

7、StringBuilder:非线程安全的可变的字符串序列。

 

8、StringBuffer和StringBuilder的API是相同(兼容)的。

 

9、StringBuffer和StringBuilder都是可变的,即无需创建新对象即可改变他们的值。

 

10、StringBuilder用在字符串缓冲区被单个线程使用时,将StrinBuilder的实例用于多个线程是不安全的。

 

11、StringBuffer可用在字符串缓冲区被多个线程使用的时候,可以在必要时对相应的方法进行同步。

 

12、如果可能,建议优先采用StringBuilder类,因为在大多数实现中,它比StringBuffer要快。

 

13、由于String对象是不可变的,在对String对象进行大量的修改时,就会在字符串常量池中产生大量的被丢弃的String对象(会消耗大量内存)。

 

14、基于以上第13点,所以如果要经常对字符串进行大量修改,则建议使用StringBuffer或StringBuilder。

 

 15、String类常用方法:charAt()、concat()、equalsignoreCase、length()、replace()、substring()、toLowerCase()、toUpperCase()、trim()以及toString()。

 

16、StringBuffer及StringBuilder常用方法:append()、delete()、insert()、reverse()及toString()。