下面代码中的 sb2 如何保存 abc 而不是 abcd?

How does sb2 in the below code holds abc but not abcd?

    StringBuffer sb1 = new StringBuffer("abc");
    StringBuffer sb2 = new StringBuffer(sb1);

    sb1.append("d");

    System.out.println(sb2);

由于 StringBuffer 是可变的并且 sb2 指向 sb1,我希望 sb2 具有 "abcd" 作为值。 虽然问题是外行,但请你帮我解释一下。

如果您看到代码 StringBuffer,则没有采用 StringBuffer 的构造函数,而是在构造函数下方,因为 StringBuffer 实现了 CharSequence 那就是为什么这有效。

public StringBuffer(CharSequence seq)

您的代码无效,因为它没有附加 StringBuffer 而不是它的内容。

来自public StringBuffer(CharSequence seq)

Constructs a string buffer that contains the same characters as the specified CharSequence. The initial capacity of the string buffer is 16 plus the length of the CharSequence argument.

StringBuffer 在调用 new StringBuffer(sb1) 时在堆中创建一个新对象。它不指向 sb1.
如果你想让 sb2 指向 sb1,那么声明 StringBuffer sb2 = sb1

public StringBuffer(String str)

Constructs a string buffer initialized to the contents of the specified string. The initial capacity of the string buffer is 16 plus the length of the string argument.