Java-StringBuilder的输出

Java-StringBuilder的输出,java,stringbuilder,Java,Stringbuilder,为什么a和b的输出都是相同的?让我将这行分解为StringBuilder b=a.append(“de”) 这里a.append(“de”)的意思是 a=a+“de”ie a=“abcde” 然后StringBuilder b=a.append(“de”)=a 现在StringBuilderb和a具有相同的引用 为了避免这个问题,您必须为b创建一个新的StringBuilder对象,我想这就是您要寻找的: StringBuilder a = new StringBuilder("abc

为什么a和b的输出都是相同的?

让我将这行分解为
StringBuilder b=a.append(“de”)

这里
a.append(“de”)
的意思是

a=a+“de”
<代码>ie a=“abcde”


然后
StringBuilder b=a.append(“de”)=a

现在StringBuilder
b
a
具有相同的引用


为了避免这个问题,您必须为
b

创建一个新的
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);
现在输出为:

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);

在您的情况下,“b”也只是对“a”的引用。这意味着“a”和“b”引用的是同一个对象。在第2行中,当您说“StringBuilder b=a.append(“de”)”时,实际上是将两者链接在一起。因此,在这一点上,它们中的两个是相同的。执行a.append(“de”)时,该行有2个函数。一种是将“de”添加到StringBuilder a中。第二个是将StringBuilder b设置为StringBuilder a。因此,由于它们都设置为相同的对象,因此结果是相同的。

StringBuilder不是不可变的。为了方便起见,它只返回自身的一个实例,以便您可以链接方法。因此
a
b
指的是此处所示的同一个实例

a=abcde
b=abcdefg
印刷品

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);

StringBuilder b=a.append(“de”)我认为您将内存中的引用复制到了b。然后追加将应用于两者,因为两者都引用内存中的同一对象。谢谢。你解释得太好了!
a=abcdefg
b=abcdefg
a = 925858445
b = 925858445
true