Java有关对象的堆内存和栈内存浅析

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关键字,开辟了一块新的堆内存空间
如下图所示
Java有关对象的堆内存和栈内存浅析_第1张图片
而声明per2没有用到new关键字,没有开辟新的堆内存空间,直接指向的per1的堆内存地址
如下图所示
Java有关对象的堆内存和栈内存浅析_第2张图片
而后对per2的age属性值进行了新的赋值per2.age=80,对per1的name也进行了新的赋值per1.name=“Jack”
但是,因为per2和per1的内存地址指向同一个人,就好比per1的家变成了per1和per2的家后,per1对家里墙进行了改变,per2对家里的家具进行了更换,最终,他们都不是单独改变的,是把他们共有的进行了改变
如下图所示
Java有关对象的堆内存和栈内存浅析_第3张图片
所以最终控制台打印的结果如下:
在这里插入图片描述
最后:简单阐述,不足希望能够指出。

你可能感兴趣的:(Java,java)