String、StringBuffer和StringBuilder的区别

String

String类是一个不可变类,它的底层是一个final类型的字符数组,所以String的值是不可变的,每次对String的操作都会生成新的String对象,造成内存浪费。

例如

String a = "123";
a = "456";
// 打印出来的a为456
System.out.println(a)

实际上是生成了一个新的string对象并赋值为456,而不是修改原来的a对象。如果原来的a对象没有被再次引用,则会被垃圾回收。

 

StringBuilder

StringBuilder代表一个字符序列可变的字符串,可以通过append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列,也可以通过toString()方法将其转换成String对象。

改变原字符串对象时是在其原本的内存空间进行操作,未创建新的内存空间。

 

 

StringBuffer

 StringBuffer对象也代表可变字符串对象。实际上,StringBuilder和StringBuffer基本相似,两个类的构造器和方法也基本相同。不同的是:StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能,所以性能略高。StringBuffer中的每个方法前都加上了synchronized关键字,相当于给方法加上了一个锁,保证线程安全。

 

posted @ 2020-05-11 05:24  zjcfrancis  阅读(140)  评论(0编辑  收藏  举报