您的位置:首页 > Web前端

Java中String StringBuffer StringBuilder的区别

2019-04-14 19:49 267 查看

String

String类是不可变类,也就是说一个String对象被创建后,这个对象中的字符串是不可改变的,直到该对象被销毁。

String str = "hello";

str = str + "world";

好像String类对象str改变了,实际上这是一种错觉。

程序第一行str指向的内存存放“hello”字符串,第二行代码执行后,又开辟了一块新的内存空间,存放的内容是"hello world",此时等号左边的String对象str实际已经指向了这个"hello world"所在的位置,指向的已经不再是之前的位置。

StringBuffer

StringBuffer对象代表一个字符序列可变的字符串,当该类型的对象被创建后,可以通过StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法来改变这个字符串对象的字符序列。另外,StringBuffer是线程安全的。

StringBuilder

StringBuilder对象也代表一个字符序列可变的字符串,既然已经有了StringBuffer类代表可变的字符串,那为什么在JDK1.5之后又新增了一个StringBuilder类呢。

因为StringBuffer是线程安全的,而为了保证线程安全,造成了性能的降低,但在实际使用中我们并不一定任何时候都必须保证程安全,比如我就只有一个线程,所以此时具有线程安全性就没有必要了,出于这方面的考虑,再次提出了StringBuilder类,该类不具备线程安全功能,所以性能略高。因此在通常情况下,如果需要创建一个内容可变的字符串对象,可优先考虑StringBuilder类。

总结

(1)如果是操作少量的数据我们直接使用 String即可;

(2)如果是多线程下操作字符串,缓冲区下操作大量数据,我们就必须使用 StringBuffer;

(3)如果单线程操作字符串,缓冲区下操作大量数据,我们最好使用 StringBuilder。

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: