[英]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");
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
。
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.