2010-10-20 39 views
-2

我有一個StringBuilder a。我必須將a的內容附加到StringBuilder b。如果bnull,則分配b=a,否則b.append(a.toString())StringBuilder.append和StringBuilder在java中的賦值有什麼不同嗎

檢查StringBuilder是否爲null還是不存在性能差異?

method_a(StringBuilder a, StringBuilder b) { 
    if (b != null) { 
     b.append(a.toString(); 
    } else { 
     b=a; 
    } 
} 
+0

請正確格式化您的代碼並將其作爲代碼高亮顯示。 – MAK

+1

「b = a」根本不起作用,只有在您自己的方法中才可以看到變化,對於指向a和b的外部代碼沒有任何影響 – Dapeng

+0

當兩者不同時,您怎麼會擔心性能?東西(除非第一個StringBuilder是空的)? – Thilo

回答

3

b = a;將具有更高的性能,因爲它只是分配參考。 b.append是一個方法調用,並需要複製字符,並(可能)創建一個新的字符數組。

問題是這是否是你想要的。請注意,ab都是局部變量,因此如果您執行b = a,則可以使用b直到方法結束。但是,它不會影響來電者。

相反,b.append就地修改對象。沒有新的對象被創建,所以這個突變在方法之外是可見的。

+0

我沒有得到'相反,b.append就地修改了對象。沒有新的對象被創建,所以這個突變在方法外是可見的。它仍然是一個局部變量嗎?所以它不能在被調用者的範圍之外被引用,因此不會被看到。 –

+0

@ darkie15:StringBuilders在方法之外創建並傳入。因此,外部將看到他們(在附加的情況下)會發生什麼。 – Thilo

+0

@Thilo:Aahh明白了。錯過了參數。 –

相關問題