String、StringBuffer、StringBuilder的区别 - 《Java核心技术》笔记

String:典型的immutable类,被声明为final class,所有属性也都是final的。不可变对象的优先是被多线程访问的时候不需要锁和等待的时间。

StringBuffer:是为解决String拼接产生太多中间对象而设计的,可以用append或add把字符串添加到指定位置。它是一个线程安全的可修改字符串,把各种修改数据的方法都加上了synchronize关键字,有性能开销;

StringBuilder:非线程安全版本的StringBuffer。

StringBuffer和StringBuilder底层都是使用了可修改数组。

String因为使用过于频繁,java为了避免在一个系统中使用大量的String对象,引入了字符串常量池,当通过直接量给String对象引用赋值的时候,会先检查常量池中是否有值相同的字符串对象,没有的话再创建并丢到常量池里面。但是通过new创建的不会去常量池查找,通常是在堆区或者栈区创建一个对象。

String str1 = "123"; //通过直接量赋值方式,放入字符串常量池
String str2 = new String(“123”);//通过new方式赋值方式,不放入字符串常量池

StringBuffer/StringBuilder会申请一个char数组,当加入的新数据超过默认大小后,会创建一个新的数组,并把原来的数组的内容搬移过去。

comments powered by Disqus