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",而另一个字符串生成器将变为"helloworld",因为它具有返回值??

但实际上一个本身也变成了"helloworld"。为什么??我是不是误会了什么?

StringBuilder遵循构建器模式是合理的,因为它用于构建字符串。

在生成器模式中,每个方法(大部分)返回当前实例,以便返回是修改后的实例。

但实际上一个本身也变成了"helloworld"。为什么??

因为您使用相同的实例再次追加,所以它已经存储了以前的值并被赋予了更新的实例。

所以我应该像这样编写代码:

StringBuildera=new StringBuilder("hello"); ...(另一个 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,并忽略返回的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"

这是为了允许链接:

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

如果没有这个,你将不得不重复sb:sb.append("a"); sb.append("b"); ...

这种模式在构建器中很常见,最著名的是jQuery。 一般来说,这可能很有用,但是当链变得难以阅读时,它也会带来错误。

StringBuilder 实际上在它的追加方法中返回这个(当前对象)。

最新更新