Java-009String、StringBuffer和StringBuilder类的区别

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

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

 

StringBuilder类是JDK1.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接口的实现过程不一样,如下图所示:

 

 

可见,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。

 

posted @ 2020-09-27 11:21  King~~~  阅读(114)  评论(0编辑  收藏  举报