Java有关对象的堆内存和栈内存浅析
对象内存分析:
- 堆内存:保存的是对象具体信息,在程序之中堆内存空间是通过new来开辟的
- 栈内存:保存的是一块堆内存的地址
这是一段学习过程中我思考的代码,理解了这个代码差不多就能理解这个堆内存和栈内存的概念
class Person{
int age;
String name;
Person(int age,String name){
this.age=age;
this.name=name;
}
public void tell(){
System.out.println(name+":"+age);
}
}
public class demo {
public static void main(String[] args) {
Person per1=new Person(18, "Mark");//初始化per1 age:18 name:Mark
Person per2=per1;//初始化per2 age:per1.age=18 name:per1.name="Mark"
per2.age=80; //
per1.name="Jack";
per1.tell();
per2.tell();
}
}
声明per1的时候的语句是 Person per1=new Person(18, “Mark”);
采用的new关键字,开辟了一块新的堆内存空间
如下图所示
而声明per2时没有用到new关键字,没有开辟新的堆内存空间,直接指向的per1的堆内存地址
如下图所示
而后对per2的age属性值进行了新的赋值per2.age=80,对per1的name也进行了新的赋值per1.name=“Jack”
但是,因为per2和per1的内存地址指向同一个人,就好比per1的家变成了per1和per2的家后,per1对家里墙进行了改变,per2对家里的家具进行了更换,最终,他们都不是单独改变的,是把他们共有的进行了改变
如下图所示
所以最终控制台打印的结果如下:
最后:简单阐述,不足希望能够指出。