Java StringBuilder追加方法链

5

我有一个问题。

例如:
StringBuilder sb = new StringBuilder();
sb.append("Teacher,");
String s = sb.append(" Good").append("Morning!").toString();

现在在最后一行中,我使用了两个append方法的链式结构。我知道每个append方法返回一个字符串在内存中的地址(我的理解是正确的吗?)。所以在第一个sb.append中,它是将其附加到sb指向的地址。并且第一个sb.append会在运行时首先被执行,但是接下来的.append会发生什么情况呢?下一个.append是在第一个append方法返回的地址上进行操作还是我错了?
我的意思是:
第一个append -> sb.append(" Good"); 第二个append -> returnedAddr.append("Morning!");
是这样工作的吗?

https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html#append(java.lang.String) 返回一个引用,这就是为什么。 - LazerBanana
2个回答

4

sb.append(" Good") 返回对调用该方法的同一StringBuilder实例的引用,这使您可以将另一个.append()调用链接到它上面。

StringBuilder sb = new StringBuilder();
sb.append("Teacher,");
String s = sb.append(" Good").append("Morning!").toString();

等同于

StringBuilder sb = new StringBuilder();
sb.append("Teacher,");
sb.append(" Good");
sb.append("Morning!");
String s = sb.toString();

3
相等,但它们的速度和JVM识别这段代码的方式会有所不同。 - Eugene

3

StringBuilder 上的 append() 只是为了方便返回 this

String s = new StringBuilder().append("Good").append(" Morning!").toString();

等同于

StringBuilder sb = new StringBuilder();
sb.append("Good");
sb.append(" Morning!");
String s = sb.toString();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接