string,stringbuffer,stringbuilder三个的区别:
主要是两个方面:运行的速度和线程安全这两个方面:
一: 运行的速度:stringbuilder》stringbuffer》string
- 为什么string是最慢的呢?
-
string为字符串常量,而stringbuffer和stringbuilder均为字符串变量,
即string对象一旦创建了该对象是不可更改的,但后两者的对象是变量,是可以更改的。
所以Java中共对string对象进行操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。
但是stringbuffer和stringbuilder的对象是变量,对变量执行操作就是直接对该
对象进行更改,而不进行创建和更改的操作,所以速度上肯定比string快很多。
二:线程安全
在线程安全上,stringbuilder是线程不安全的,而stringbuffer是线程安全的。
为什么这么说呢?
这是因为,如果一个stringbuffer对象在字符串缓冲去被多个线程使用时候,
stringbuffer中很多方法可以带有synchronized关键字,
所以可以确保线程安全的。当时stringbuilder的方法则没有该关键字,所以不能确保
线程安全,有可能出现一些错误的操作,所以如果要进行操作是多线程的,那么就要使用stringbuffer,
但是在单线程的情况下,还是建议使用速度比较快的stringbuilder。
总结:
1.string:适用于少量的字符串操作的情况。
2.stringbuilder:适用于单线程在字符缓冲区进行大量操作的情况下。
3.stringbuffer:适用于多线程下在字符缓冲区进行大量操作的情况