StringBuffer str =新的StringBuffer(“ Java”); 字符串“ Java”将在哪里创建?普通堆还是常量池?
接下来,如果我将其修改为- str.append(“九”);
修改将在哪里发生?会在常量池中修改字符串“ Java”并将其转换为“ Java 9”吗?
答案 0 :(得分:6)
StringBuffer str = new StringBuffer("Java");
在哪里将字符串“ Java” 被创造?普通堆还是常量池?
该语句不会创建String对象。它创建一个StringBuffer
对象,并在此过程中将字符串“ Java”中的字符复制到str
内部维护的字符数组中。该语句运行之前,字符串“ Java”已经存在。粗略地说,是在初始化包含此代码的类时在常量池中创建的。
接下来,如果我将其修改为-
str.append(" nine");
修改将在哪里发生?它会修改字符串吗 常量池中的“ Java”并将其转换为“ Java九”?
修改发生在str
维护的内部字符数组中。原始字符串“ Java”不受影响。 Java中的String
对象是不可变的。