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


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",之后我再次在主方法中用"New Instance"初始化它。
我的问题是在哪个内存区域"实例","新实例"one_answers"本地"将去和如何?

由于您声明了一个String变量而没有使用新关键字,因此它们将在String Constant Pool中占有一席之地。我看不出这段代码有任何混乱。如果像

这样声明变量
String s = new String("local");

那么这将被创建在堆和字符串常量池。但是了解字符串池变化的主要一点是,从java 1.7开始,字符串池已经转移到堆中,您不再受固定大小的permgen空间的限制。

最新更新