String、StringBuffer和StringBuilder类的区别

樵夫2021-08-26 10:10

在Java中字符串属于对象,Java提供了String类来创建和操作字符串。String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。

Java提供了两个可变字符串类StringBuffer和StringBuilder,中文翻译为“字符串缓冲区”。

StringBuilder类是JDK 1.5新增的类,它也代表可变字符串对象。实际上,StringBuilder和StringBuffer功能基本相似,方法也差不多。不同的是,StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能,所以性能略高。因此在通常情况下,如果需要创建一个内容可变的字符串对象,则应该优先考虑使用StringBuilder类。

StringBuffer、StringBuilder、String中都实现了CharSequence接口。CharSequence是一个定义字符串操作的接口,它只包括length()、charAt(int index)、subSequence(int start,int end)这几个API。

StringBuffer、StringBuilder、String对CharSequence接口的实现过程不一样,如下图1所示:

对CharSequence接口的实现

String、StringBuffer和StringBuilder类的区别

可见,String直接实现了CharSequence接口,StringBuilder和StringBuffer都是可变的字符序列,它们都继承于AbstractStringBuilder,实现了CharSequence接口。

总结

String是Java中基础且重要的类,被声明为final class,是不可变字符串。因为它的不可变性,所以拼接字符串时候会产生很多无用的中间对象,如果频繁的进行这样的操作对性能有所影响。

StringBuffer就是为了解决大量拼接字符串时产生很多中间对象问题而提供的一个类。它提供了append和add方法,可以将字符串添加到已有序列的末尾或指定位置,它的本质是一个线程安全的可修改的字符序列。

在很多情况下我们的字符串拼接操作不需要线程安全,所以StringBuilder登场了。StringBuilder是JDK1.5发布的,它和StringBuffer本质上没什么区别,就是去掉了保证线程安全的那部分,减少了开销。

线程安全:

StringBuffer:线程安全

StringBuilder:线程不安全

速度:

一般情况下,速度从快到慢为StringBuilder>StringBuffer>String,当然这是相对的,不是绝对的。

使用环境:

操作少量的数据使用String。

单线程操作大量数据使用StringBuilder。

多线程操作大量数据使用StringBuffer。

以上就是小编为大家整理发布的“String、StringBuffer和StringBuilder类的区别”一文,更多相关内容尽在开课吧Java教程频道。

String、StringBuffer和StringBuilder类的区别

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用
分享
全部评论快来秀出你的观点
登录 后可发表观点…
发表
暂无评论,快来抢沙发!
高并发编程训练营