簡體   English   中英

什么時候在stringbuilder / stringbuffer上使用string?

[英]when to use string over stringbuilder/stringbuffer?

我突然想到一個問題,如果StringBuilder / StringBuffer總是比String好,那為什么還要使用它呢?

我的意思是不應該始終使用StringBuilder / StringBuffer來完全替換String嗎? 有人說“如果由於String對象是不可變的,則Object值不會改變,請使用String Class”,但是我們也可以使用StringBuilder / StringBuffer以獲得更好的性能。

字符串比StringBuilder提供更多的功能。 顧名思義,StringBuilder的唯一目的是構建一個String。

一個String的效率不比一個StringBuilder的效率低(不知道從哪里得到的)。 實際上,它效率更高,因為它是不可變的,因此您可以安全地共享引用而無需防御性副本。

最重要的是:無論如何,性能通常不是主要的考慮因素。 更重要的是正確性,可讀性,安全性,可維護性。 使用不可變的字符串會增加所有這些因素。

如果String比StringBuilder好得多,那么為什么要有StringBuilder? 因為在一個用例中,使用StringBuilder比使用String效率更高:通過重復添加部分來構造String:

String s = "";
for (String part: collection) {
    s += part;
}

上面的代碼很慢,因為創建並復制了許多臨時String對象,然后必須對其進行GC處理。 在這種情況下,請使用StringBuilder:

StringBuilder builder = new StringBuilder();
for (String part: collection) {
    builder.append(part);
}
String s = builder.toString();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM