以下代码中的sb2如何保存abc但不保存abcd?

时间:2019-12-10 05:13:24

标签: java data-structures stringbuffer

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

    sb1.append("d");

    System.out.println(sb2);

由于StringBuffer是可变的,并且sb2指向sb1,所以我希望sb2具有“ abcd”作为值。 尽管问题是外行,但是请您帮我解释一下。

2 个答案:

答案 0 :(得分:1)

StringBuffer在调用$("#abc").val("two") 时在Heap中创建一个新对象。它不指向new StringBuffer(sb1)
如果您希望使sb1指向sb2,请声明sb1

  

StringBuffer sb2 = sb1

     

构造一个字符串缓冲区,该字符串缓冲区初始化为   指定的字符串。字符串缓冲区的初始容量为16加   字符串参数的长度。

答案 1 :(得分:0)

如果您看到代码StringBuffer,则没有构造函数使用 StringBuffer ,而是在构造函数下,并且因为StringBuffer实现了CharSequence,这就是它起作用的原因。 / p>

public StringBuffer(CharSequence seq)

您的代码无法正常工作,因为它没有附加StringBuffer而不是内容。

来自public StringBuffer(CharSequence seq)

  

构造一个字符串缓冲区,其中包含与指定CharSequence相同的字符。字符串缓冲区的初始容量为16加上CharSequence参数的长度。