4

我知道当我们创建字符串文字时,它会进入 permgenspace。我的问题是它是否会在 jvm 的整个生命周期内一直存在,即使该字符串文字是方法的本地值。例如,我有以下代码片段:-

private static void testString1(){
        String str1="tetingLiteral";
    }


private static void testString2(){
        String str2="tetingLiteral";
    }

现在从我调用的主要方法

testString1();
testString12();

str1 和 str2 将引用相同的内存位置。

我的理解是它们将引用相同的内存位置(即使在方法内部创建了字符串文字,它也会在 jvm 的整个生命周期内保留在那里)。但仍然想确认它,因为我无法以编程方式检查它,因为无法打印字符串内存位置

4

2 回答 2

9

Java 语言规范的第 3.10.5 节

此外,字符串字面量总是引用 String 类的同一个实例。这是因为字符串字面量 - 或者更一般地说,作为常量表达式值的字符串(第 15.28 节) - 是“内部的”,以便使用 String.intern 方法共享唯一实例。

(请参阅下面的示例,该示例显示字符串实习也在不同包中的类之间起作用。)

于 2013-03-24T09:07:08.147 回答
5

确切的实现是 JVM 特定的,但在 Oracle Java 7 中,字符串文字位于堆上,并且可以在没有类使用字符串文字时被清理(因为它们已被卸载)

于 2013-03-24T09:28:43.377 回答