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”初始化它。
我的问题是“实例”,“新实例”和“本地”的内存区域将会如何?
答案 0 :(得分:0)
由于您在不使用new关键字的情况下声明了String变量,因此它们将在String Constant Pool中占据一席之地。我没有看到任何与此代码混淆的部分。如果您已将变量声明为
String s = new String("local");
然后,这将在堆上创建,也可以在String常量池中创建。 但是知道字符串池中的更改的要点是从java 1.7开始,字符串池已经转移到堆,并且你不再受限于固定大小的permgen空间。