一、String的基本特征:
1.被声明为final类,内部变量亦被final修饰。
2.典型的immutable(不可变)类。好处:当需要申明多个相同的字符串时,这里只会创建一个字符串对象,去常量池查找。
3.字符串常量池缓存。
String使用陷阱
运行这段代码会发现先输出“abc”,然后又输出“abcde”,好像是str这个对象被更改了,其实,这只是一种假象罢了,JVM对于这几行代码是这样处理的,首先创建一个String对象str,并把“abc”赋值给str,然后在第三行中,其实JVM又创建了一个新的对象也名为str,然后再把原来的str的值和“de”加起来再赋值给新的str,而原来的str就会被JVM的垃圾回收机制(GC)给回收掉了,所以,str实际上并没有被更改,也就是前面说的String对象一旦创建之后就不可更改了。所以,Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。
而StringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。
二、StringBuilder与StringBuffer
1.实现原理基于可修改的char数组,默认大小为16
2.继承AbstractStringBuilder
3.StringBuffer线程安全,StringBuilder非线程安全
三者区别详细: