1.19 String、StringBuffer和StringBuilder类的区别
在 Java 中字符串屬于對象,Java 提供了 String 類來創(chuàng)建和操作字符串。String 類是不可變類,即一旦一個 String 對象被創(chuàng)建以后,包含在這個對象中的字符序列是不可改變的,直至這個對象被銷毀。
Java 提供了兩個可變字符串類 StringBuffer 和 StringBuilder,中文翻譯為“字符串緩沖區(qū)”。
StringBuilder 類是 JDK 1.5 新增的類,它也代表可變字符串對象。實際上,StringBuilder 和 StringBuffer 功能基本相似,方法也差不多。不同的是,StringBuffer 是線程安全的,而 StringBuilder 則沒有實現(xiàn)線程安全功能,所以性能略高。因此在通常情況下,如果需要創(chuàng)建一個內(nèi)容可變的字符串對象,則應該優(yōu)先考慮使用 StringBuilder 類。
StringBuffer、StringBuilder、String 中都實現(xiàn)了 CharSequence 接口。CharSequence 是一個定義字符串操作的接口,它只包括 length()、charAt(int index)、subSequence(int start, int end) 這幾個 API。
StringBuffer、StringBuilder、String 對 CharSequence 接口的實現(xiàn)過程不一樣,如下圖 1 所示:
可見,String 直接實現(xiàn)了 CharSequence 接口,StringBuilder 和 StringBuffer 都是可變的字符序列,它們都繼承于 AbstractStringBuilder,實現(xiàn)了 CharSequence 接口。
總結(jié)
String 是 Java 中基礎(chǔ)且重要的類,被聲明為 final class,是不可變字符串。因為它的不可變性,所以拼接字符串時候會產(chǎn)生很多無用的中間對象,如果頻繁的進行這樣的操作對性能有所影響。
StringBuffer 就是為了解決大量拼接字符串時產(chǎn)生很多中間對象問題而提供的一個類。它提供了 append 和 add 方法,可以將字符串添加到已有序列的末尾或指定位置,它的本質(zhì)是一個線程安全的可修改的字符序列。
在很多情況下我們的字符串拼接操作不需要線程安全,所以 StringBuilder 登場了。StringBuilder 是 JDK1.5 發(fā)布的,它和 StringBuffer 本質(zhì)上沒什么區(qū)別,就是去掉了保證線程安全的那部分,減少了開銷。
線程安全:
StringBuffer:線程安全
StringBuilder:線程不安全
速度:
一般情況下,速度從快到慢為 StringBuilder > StringBuffer > String,當然這是相對的,不是絕對的。
使用環(huán)境:
操作少量的數(shù)據(jù)使用 String。
單線程操作大量數(shù)據(jù)使用 StringBuilder。
多線程操作大量數(shù)據(jù)使用 StringBuffer。
總結(jié)
以上是生活随笔為你收集整理的1.19 String、StringBuffer和StringBuilder类的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.18 StringBuffer替换特
- 下一篇: 1.20 正则表达式详解