有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我的字符串是从哪个内存区域调用的?

public class Do {

    static String s="Instance";

    public static void method(String s){
        s="Add";
    }

    public static void main(String[] args) {
        Do d=new Do();
        s="new Instance";
        String s="Local";
        method(s);
        System.out.println(s);
        System.out.println(d.s);
    }
}

输出为:

Local

new Instance

在这里,我将静态全局变量设置为“Instance”,然后在main方法中使用“newinstance”再次初始化它
我的问题是“实例”、“新实例”和“本地”将在哪个内存区域中运行,以及如何运行


共 (1) 个答案

  1. # 1 楼答案

    因为您已经声明了一个字符串变量,而没有使用新的关键字,所以它们将在字符串常量池中占有一席之地。我看不出这段代码有任何混乱之处。如果你把变量声明为

    String s = new String("local");
    

    然后,这将在堆和字符串常量池上创建。 但是了解字符串池中的变化的主要一点是,从Java1.7开始,字符串池已经转移到了heap,并且不再受限于固定大小的permgen空间