Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从哪个内存区域调用我的字符串?_Java_String_Methods_Static_Static Methods - Fatal编程技术网

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

Java 从哪个内存区域调用我的字符串?,java,string,methods,static,static-methods,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";

输出为:

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);
    }
}
在这里,我将静态全局变量设置为“Instance”,然后在main方法中使用“New Instance”再次初始化它。

我的问题是“Instance”、“New Instance”和“Local”将在哪个内存区域中运行,以及如何运行?

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

Local

new Instance
然后,这将在堆和字符串常量池上创建。
但是了解字符串池中的变化的要点是,从java 1.7开始,字符串池已经转移到了堆中,您不再受限于固定大小的permgen空间。

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

Local

new Instance
然后,这将在堆和字符串常量池上创建。
但是了解字符串池中的变化的要点是,从java 1.7开始,字符串池已经转移到了堆中,您不再受限于固定大小的permgen空间。

它们都将进入字符串常量池(java 8中的Metaspace)它们都将进入字符串常量池(java 8中的Metaspace)我知道这一点,但只要逐行证明输出是正确的,因为它是“本地”和“新实例”。以及s=“Instance”在何处以及如何保存以及s=“local”在何处保存?我知道这一点,但只要逐行证明输出是正确的,因为它是“local”和“New Instance”。以及s=“Instance”在何处和如何保存以及s=“local”在何处保存?