Java中类的实例化解析和内存解析

39 阅读1分钟

对象在内存中的分配涉及到的内存结构(理论)

  • 栈(stack): 方法内定义的变量,存储在栈中。

  • 堆(heap) : new 出来的结构(比如:数组实体、对象的实体)。包括对象中的属性

  • 方法区(method area) : 存放类的模板。比如:Person类的模板

类中对象的内存解析

创建类的一个对象

image.png

创建类的多个对象

image.png

image.png

强调1:创建了Person类的两个对象
Person p1 = new Person();
Person p2 = new Person();

说明:创建类的多个对象时,每个对象在堆空间中有一个对象实体。每个对象实体中保存着一份类的属性。
如果修改某一个对象的某属性值时,不会影响其他对象此属性的值。
p1.age = 10;
p2.age = 20;

p1.age = 30;
System.out.println(p2.age);//20

强调2:声明类的两个变量
Person p1 = new Person();
Person p3 = p1;

说明:此时的p1,p3 两个变量指向了堆空间中的同一个对象实体。(或p1,p3保存的地址值相同)
如果通过其中某一个对象变量修改对象的属性时,会影响另一个对象变量此属性的值。