第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么StringBuilder有String?

為什么StringBuilder有String?

郎朗坤 2019-07-24 15:10:48
為什么StringBuilder有String?我剛剛StringBuilder第一次遇到并且感到驚訝,因為Java已經(jīng)有一個非常強大的String類允許追加。為什么選擇String二等?我在哪里可以了解更多信息StringBuilder?
查看完整描述

3 回答

?
慕妹3242003

TA貢獻(xiàn)1824條經(jīng)驗 獲得超6個贊

String不允許附加。您在a上調(diào)用的每個方法都會String創(chuàng)建一個新對象并將其返回。這是因為String它是不可變的 - 它不能改變它的內(nèi)部狀態(tài)。

另一方面StringBuilder是可變的。調(diào)用append(..)它時會改變內(nèi)部char數(shù)組,而不是創(chuàng)建新的字符串對象。

因此,擁有以下內(nèi)容更有效:

StringBuilder sb = new StringBuilder();for (int i = 0; i < 500; i ++) {
    sb.append(i);}

而不是str += i,它將創(chuàng)建500個新的字符串對象。

請注意,在示例中我使用循環(huán)。正如helios在評論中指出的那樣,編譯器會自動將表達(dá)式轉(zhuǎn)換String d = a + b + c為類似的表達(dá)式

String d = new StringBuilder(a).append(b).append(c).toString();

還需要注意的是有StringBufferStringBuilder。不同之處在于前者具有同步方法。如果將其用作局部變量,請使用StringBuilder。如果它可能被多個線程訪問,請使用StringBuffer(這是罕見的)


查看完整回答
反對 回復(fù) 2019-07-24
?
有只小跳蛙

TA貢獻(xiàn)1824條經(jīng)驗 獲得超8個贊

這是一個具體的例子,為什么 -


int total = 50000;

String s = ""; 

for (int i = 0; i < total; i++) { s += String.valueOf(i); } 

// 4828ms


StringBuilder sb = new StringBuilder(); 

for (int i = 0; i < total; i++) { sb.append(String.valueOf(i)); } 

// 4ms

正如您所看到的,性能差異很大。


查看完整回答
反對 回復(fù) 2019-07-24
  • 3 回答
  • 0 關(guān)注
  • 551 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號