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

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

标签: java string methods static static-methods

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方法中的“New Instance”初始化它。
我的问题是“实例”,“新实例”和“本地”的内存区域将会如何?

1 个答案:

答案 0 :(得分:0)

由于您在不使用new关键字的情况下声明了String变量,因此它们将在String Constant Pool中占据一席之地。我没有看到任何与此代码混淆的部分。如果您已将变量声明为

String s = new String("local");

然后,这将在堆上创建,也可以在String常量池中创建。 但是知道字符串池中的更改的要点是从java 1.7开始,字符串池已经转移到堆,并且你不再受限于固定大小的permgen空间。