stringbuilder的输出

jgzswidk  于 2021-06-27  发布在  Java
关注(0)|答案(4)|浏览(360)
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的产量是一样的?

wswtfjt7

wswtfjt71#

让我把队伍分开 StringBuilder b = a.append("de"); 在这里 a.append("de") 方法 a = a + "de" . ie a = "de" 那么 StringBuilder b = a.append("de") = a; 现在是stringbuilder b 以及 a 有相同的参考。
为了避免这个问题,你必须创建一个新的 StringBuilder 对象 b .

ukqbszuj

ukqbszuj2#

stringbuilder不是不变的。为了方便起见,它只返回自身的一个示例,这样您就可以链接方法。所以呢 a 以及 b 请参阅此处所示的相同示例。

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
xt0899hw

xt0899hw3#

我想这就是你想要的:

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”引用的是同一个对象。其中一个的任何变化都会影响到另一个。

lc8prwob

lc8prwob4#

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

相关问题