当StringBuffer创建String对象时,它在哪里存储在内存中?

时间:2018-06-22 06:05:48

标签: java

StringBuffer str =新的StringBuffer(“ Java”); 字符串“ Java”将在哪里创建?普通堆还是常量池?

接下来,如果我将其修改为- str.append(“九”);

修改将在哪里发生?会在常量池中修改字符串“ Java”并将其转换为“ Java 9”吗?

1 个答案:

答案 0 :(得分:6)

  

StringBuffer str = new StringBuffer("Java");在哪里将字符串“ Java”   被创造?普通堆还是常量池?

该语句不会创建String对象。它创建一个StringBuffer对象,并在此过程中将字符串“ Java”中的字符复制到str内部维护的字符数组中。该语句运行之前,字符串“ Java”已经存在。粗略地说,是在初始化包含此代码的类时在常量池中创建的。

  

接下来,如果我将其修改为-str.append(" nine");

     

修改将在哪里发生?它会修改字符串吗   常量池中的“ Java”并将其转换为“ Java九”?

修改发生在str维护的内部字符数组中。原始字符串“ Java”不受影响。 Java中的String对象是不可变的。