众所周知,静态成员具有共享内存,它们与对象无关:

class TestStatic {
    public static int a = 10;
}

class Main{
    public static void main(//){
        TestStatic obj1 = new TestObj//;
        obj1.a=15;
        TestStatic obj2 = new TestObj//;
        // obj2.a equals 15 too
    }
}


假设我们有以下情形:

class TestStatic {

    public static class InnerClass {
    }

    public static void main(//) {
         TestStatic.InnerClass classobj1 = new TestStatic.InnerClass();
         TestStatic.InnerClass classobj2 = new TestStatic.InnerClass();
    }

}


Java如何对待classobj1classobj2?分配两个不同的内存位置还是共享一个?如果内存位置不同,原因是什么?

最佳答案

java如何对待classobj1和classobj2?分配两个不同的内存位置还是共享一个?


两个分开的。就像您有:

Map m1 = new HashMap();
Map m2 = new HashMap();



  如果内存位置不同,是什么原因?


因为此处的static与该类有关,而不与该类的实例有关。如果您有一个不是static的嵌套类,则它与包含类的实例有关。

Oracle Nested Class Tutorial可能有用。

07-24 19:04