如何将堆区数据移动到String常量池?

时间:2016-09-30 05:35:14

标签: java string heap constants

如何将堆区数据移动到String常量池?

        String s3 = new String("Test");
         final String s4 = s3.intern();
         System.out.println(s3 == s4);//fasle(i need true)

我不想创建新对象,所以只需从堆中剪切对象并将其粘贴到String常量池

1 个答案:

答案 0 :(得分:0)

当您调用intern时,您没有将堆数据移动到String常量池,如果常量池中不存在另一个新的String,那么您只是将其添加到常量池中(不是在你的情况下发生,"Test"已经添加到第-1行的常量池中。

您可能希望将代码更改为:

public static void main(String[] args) {
    String s3 = new String("Test");
    s3 = s3.intern();
    String s4 = "Test";
    System.out.println(s3 == s4);//fasle(i need true)
}

在上面的代码中,您再次将对s3的实习值的引用分配给s3。接下来,您将从S4中的String constants池中获取相同的对象。