Java - StringBuilder 的输出

问题描述

StringBuilder a = new StringBuilder("abc");
StringBuilder b = a.append("de");
b = b.append("f").append("g");
System.out.println("a=" + a);
System.out.println("b=" + b);

为什么a &b 的输出是一样的?

解决方法

让我把行StringBuilder b = a.append("de");

这里的 a.append("de") 表示

a = a + "de"ie a = "abcde"

然后StringBuilder b = a.append("de") = a;

现在 StringBuilder ba 具有相同的引用。

为避免此问题,您必须为 StringBuilder 创建一个新的 b 对象。

,

我认为这就是您要找的:

StringBuilder a = new StringBuilder("abc");
StringBuilder b = new StringBuilder(a.append("de"));
b = b.append("f").append("g");
System.out.println("a=" + a);
System.out.println("b=" + b);

现在输出为:

a=abcde
b=abcdefg

在您的情况下,'b' 也只是对 'a' 的引用。这意味着 'a' 和 'b' 引用同一个对象。一个方面的任何变化都会反映在另一个方面。

,

在第 2 行中,当您说 "StringBuilder b = a.append("de")" 时,您实际上是将它们链接在一起。所以,他们两个在这一点上是一样的。当您执行 a.append("de") 时,该行有 2 个函数。一种是在StringBuilder a 中添加“de”。第二种是将 StringBuilder b 设置为 String builder a。因此,由于它们都设置为相同的内容,因此结果相同。

,

StringBuilder 不是不可变的。它只是为了方便而返回自身的一个实例,以便您可以链接方法。所以 ab 指的是这里显示的同一个实例。

StringBuilder a = new StringBuilder("abc");
StringBuilder b = a.append("de");
b = b.append("f").append("g");
System.out.println("a=" + a);
System.out.println("b=" + b);

System.out.println("a = " + System.identityHashCode(a));
System.out.println("b = " + System.identityHashCode(b));
System.out.println(a == b);

印刷品

a=abcdefg
b=abcdefg
a = 925858445
b = 925858445
true