在学校,我的老师教我们对象和非静态变量(Java),她解释说,如果我们声明一个非静态全局变量,比如在一个类中int a
,并创建一个类的对象obj
,然后我们可以使用该对象访问非静态变量a
使用点运算符(obj.a
)。
然后她说,如果我们创建另一个相同类的对象(比如obj1
),并使用obj1.a1
访问a
,那么它将独立于obj.a
,因为obj和obj1是不同的对象,因此obj.a
和obj1.a
具有不同的内存位置。
我的问题是,系统是否有对象的真正内存位置/地址?就像,内存分配是像分配一个地址给对象和存储各种非静态变量在它(像对象的内存位置被分区,以适应不同的非静态变量)?或者对象只是一个假设元素,这是用来指向和访问各种非静态变量,这是那些实际上有真正的内存位置在存储?
Tl;dr:是否为对象分配内存位置,或者它只对对象下的非静态变量这样做,并且对象是一个假设的元素,在存储中没有真正的内存位置?
我真的很感激如果那些回答这保持初学者友好一点,因为现在我只是在10年级。
所有东西都需要一个内存位置:每个对象,每个非静态变量和静态变量。
如果它们没有内存位置,它们基本上就不存在。Object也需要一个内存位置,否则我们就不知道哪些非静态变量与哪些对象相关。
- 硬盘未分配任何内容。JVM分配内存。 静态是无关的,当它涉及到内存分配。静态只是意味着该变量的值对类的所有实例可用,如果是私有的,或者对访问该变量的任何类可用,如果是公共的。例如:
public class MyClass {
private static String value = "myStaticVariable";
}
MyClass的所有实例都可以访问value,并将获得"myStaticVariable"如果这些实例中的任何一个更改了该值,则所有实例都会反映该更改。
至于内存分配是如何执行的,可以把实例化中的所有内容都看作指向内存位置的指针。如果它是一个原语,则分配适当大小的内存,并且类实例指向该内存位置。Java隐藏从我们真的不需要知道内部运作。如果变量指向另一个类,那么它指向另一个实例,这些实例又指向它自己的成员变量。如果变量稍后被重新分配,那么原始内存分配将被标记为垃圾收集,以便在以后某个不可预见的时间处理。