簡體   English   中英

Java StringBuilder append() 返回?

[英]Java StringBuilder append() return?

我只是 Java 編程的新手,我真的很困惑 StringBuilder 中方法 append() 的返回類型是什么?

我已經檢查了https://docs.oracle.com/javase/9​​/docs/api/index.html?java/lang/String.html上的 API 文檔,返回的是“StringBuilder”,所以我應該寫代碼如下:

StringBuilder a=new StringBuilder("hello");
...(another StringBuilder object)=a.append("world");

並且 a 仍然是“hello”,另一個 stringbuilder 將變為“helloworld”,因為它有返回值??

但實際上a本身也變成了“helloworld”。 為什么??我是不是誤會了什么?

StringBuilder遵循Builder Pattern是合理的,因為它用於構建 String。

在構建器模式中,每個方法(大部分)都返回當前實例,因此返回的是一個修改過的實例。

但實際上a本身也變成了“helloworld”。 為什么??

因為您正在使用相同的實例再次追加。所以它已經存儲了以前的值並被賦予了更新的實例。

所以我應該寫這樣的代碼:

StringBuilder a=new StringBuilder("你好"); ...(另一個 StringBuilder 對象)=a.append("world");

你不需要。 由於返回實例,您可以鏈接您的方法調用。 這就是建造者模式的美妙之處。

StringBuilder a=new StringBuilder("hello");
a.append("World").append(" Mr.").append("Blah");

為什么 append 返回一個StringBuilder

這樣你就可以像這樣附加“a”、“b”和“c”:

StringBuilder sb = new StringBuilder()
        .append("a")
        .append("b")
        .append("c");

返回什么

返回的StringBuilder與調用的相同,因此:

StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = sb1.append("a")
        .append("b")
        .append("c");
System.out.println(sb1 == sb2);

打印出true ,這就是示例中的 2 個StringBuilder具有相同文本的原因,因為它們是相同的StringBuilder

這是為了允許鏈接

sb.append("a").append("b").append("c"). ...

如果沒有這個,你將不得不重復 sb: sb.append("a"); sb.append("b"); ... sb.append("a"); sb.append("b"); ...

這種模式在構建器中很常見,在jQuery 中最為著名。 一般來說,這很有用,但是當鏈變得難以閱讀時,它也會引入錯誤。

StringBuilder類(以及它的線程安全兄弟StringBuffer )提供了一個流暢的構建器模式。

大多數方法在應用該方法后返回StringBuilder的修改實例,因此您可以在其上鏈調用方法。

您可以像使用void返回方法一樣append invoke append ,並忽略返回的StringBuilder進行一次性操作,或者您可以鏈接調用,以確保您仍在逐步操作相同的StringBuilder

示例

StringBuilder sb = new StringBuilder();
sb.append("a"); // void-like invocation
sb.append("b").append("c"); // chained invocation
// terminal invocation as it doesn't return an instance of 
// StringBuilder, but (immutable) String
String s = sb.toString(); // "abc"

StringBuilder 實際上在它的 append 方法中返回這個(當前對象)。

暫無
暫無

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

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