最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

1.2 String 和 StringBuffer,StringBuilder 的區(qū)別是什么? String 為什么是不可變的

2020-11-10 22:49 作者:夜雨658  | 我要投稿

可變性?

簡(jiǎn)單的來說:String 類中使用 final 關(guān)鍵字字符數(shù)組保存字符串, private final char value[] ,所以 String 對(duì)象是不可變的。而 StringBuilder 與 StringBuffer 都繼承自 AbstractStringBuilder 類,在 AbstractStringBuilder中也是使用字符數(shù)組保存字符串 char[]value 但是沒有 用 final 關(guān)鍵字修飾,所以這兩種對(duì)象都是可變的。

StringBuilder 與 StringBuffer 的構(gòu)造方法都是調(diào)用父類構(gòu)造方法也就是 AbstractStringBuilder 實(shí)現(xiàn)的,大家可以自?

行查閱源碼。 2

AbstractStringBuilder.java?

abstract class AbstractStringBuilder implements Appendable, CharSequence {

char[] value;?

int count;?

AbstractStringBuilder() {

}?

AbstractStringBuilder(int capacity) {?

value = new char[capacity];

}?

線程安全性?

String 中的對(duì)象是不可變的,也就可以理解為常量,線程安全。 AbstractStringBuilder 是 StringBuilder 與 StringBuffer 的公共父類,定義 了一些字符串的基本操作,如 expandCapacity.append.insert.indexOf 等公 共 方法。StringBuffer 對(duì)方法加了同步鎖或者對(duì)調(diào)用的方法加了同步鎖,所以 是線程安全的。StringBuilder 并沒有對(duì) 方法進(jìn)行加同步鎖,所以是非線程安全的。?

性能?

abstract class AbstractStringBuilder implements Appendable, CharSequence {?

char[] value;

int count;?

AbstractStringBuilder() {?

}?

AbstractStringBuilder(int capacity) {

value = new char[capacity];

}

每次對(duì) String 類型進(jìn)行改變的時(shí)候,都會(huì)生成一個(gè)新的 String 對(duì)象,然 后將指針指向新的 String 對(duì)象。

StringBuffer 每次都會(huì)對(duì) StringBuffer 對(duì)象本身進(jìn)行操作,而不是生成新 的對(duì)象并改變對(duì)象引用。相同情況下使用 StirngBuilder 相比使用

StringBuffer 僅能獲得 10%~15% 左右的性能提升,但卻要冒多線程不安全的 風(fēng)險(xiǎn)。

3 對(duì)于三者使用的總結(jié):

1. 操作少量的數(shù)據(jù) = String?

2. 單線程操作字符串緩沖區(qū)下操作大量數(shù)據(jù) = StringBuilder?

3. 多線程操作字符串緩沖區(qū)下操作大量數(shù)據(jù) = StringBuffer

1.2 String 和 StringBuffer,StringBuilder 的區(qū)別是什么? String 為什么是不可變的的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
巴南区| 来安县| 镇江市| 固原市| 奉化市| 霍林郭勒市| 察隅县| 游戏| 辛集市| 淄博市| 孝义市| 丹阳市| 盐城市| 志丹县| 南平市| 廉江市| 都昌县| 余庆县| 黄浦区| 广丰县| 兰溪市| 三穗县| 德令哈市| 山阴县| 浦东新区| 阳新县| 卓尼县| 安平县| 大埔县| 太保市| 栖霞市| 应城市| 沙洋县| 德阳市| 宝鸡市| 德江县| 淮南市| 财经| 肃北| 莫力| 丰都县|