如何将堆区数据移动到String常量池?
String s3 = new String("Test");
final String s4 = s3.intern();
System.out.println(s3 == s4);//fasle(i need true)
我不想创建新对象,所以只需从堆中剪切对象并将其粘贴到String常量池
中答案 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池中获取相同的对象。