String StringBuffer StringBuilder的区别

来源:互联网 发布:大数据和股票有哪些 编辑:程序博客网 时间:2024/04/29 02:31

简明扼要:

不同点:

1. String对象是不可改变的,StringBuffer对象和StringBuilder对象是可修改的。

2. String对象保存在constant String Pool中,而Stringbuffer和StringBuilder保存在heap中。

3. String和StringBuffer是线程安全的,而StringBuilder不是线程安全的。

4. String和StringBuffer在jdk 1.0中就已提供,StringBuilder在jdk 1.5时才提供。

5. String和StringBuilder执行速度快,StringBuffer执行速度慢。

相同点:

1. 都是操作String的类。

2. 都在java.lang.*;包下。


String: 

1. String是不可改变对象(一旦创建不能修改),而且是final的。

2. 创建的String对象存储在 constant String Pool.

3. 对String引用的每次修改都创建了一个新的String对象,这样在生成最终String对象过程中会生成很我中间String对象,这些中间String对象都会成为垃圾。所以在需要修改String内容的地方,使用StringBuffer或StringBuilder代替。

4. Java中的不可改变对象都是线程安全的,所以String对象不能同时被两个对象使用。

5. String对象不可改变的好处:它的hashcode稳定,使它成为一个快速的hashmap的key。

6. 当使用"+"连接两个字符串时,它的内部实现是使用StringBuffer或StringBuilder。


String demo = "hello";

// 上面的String对象存储在 constant String Pool,它的值不能修改


demo = "byte";

// "byte" String对象存储在 constant String Pool,被demo引用引用

// "hello" String对象仍然在 constant String Pool,但是失去了引用


StringBuffer

1. StringBuffer是可改变对象,对象创建后可以修改它的值而不创建新的对象。

2. StringBuffer对象存储在heap中。

3. StringBuffer中的方法都是synchronized,也就是说StringBuffer是线程安全的。因为线程安全,所以也影响了方法的性能,执行StringBuilder中的方法比StringBuffer要快。

4. 调用StringBuffer对象的toString()方法可以将StringBuffer对象转换为String。

5. 当需要String可改变且要求线程安全时使用StringBuffer。


StringBuilder

1. StringBuilder是StringBuffer的拷贝,但去除了synchronized。所以,StringBuilder与StringBuffer包含的方法相同,但StringBuilder不是线程安全的,同时,因为没有synchronized,所以StringBuilder中方法的执行速度远快于StringBuffer中的相同方法。

2. StringBuilder对象也保存的heap中,而且可以修改对象的值而不创建新的对象。

3. StringBuilder在jdk 1.5后出现,是StringBuffer的补充替代版本。而String和StringBuffer在jdk 1.0时就已出现。

4. 当需要String可改变且不要求线程安全时,使用StringBuilder。因为StringBuild中方法执行速度快于StringBuffer,所以优先使用StringBuilder。


                                                         String                                   StringBuffer                StringBuilder

Storage area                    constant string pool                              heap                              heap

modifiable                            No ( immutable )                        Yes ( mutable )           Yes ( mutable )

thread safe                                    Yes                                              Yes                                  No

performance                                 Fast                                        very slow                            Fast


0 0
原创粉丝点击