Java里的堆和栈

Java里的堆和栈是相对比较抽象的一个概念,对于初学者而言,堆和栈的概念要比类、方法、变量这些概念难懂一些,以下是我整理的关于Java中堆和栈的一点拙见,希望对您有用。

我把堆和栈理解为两个宿舍,其中栈是军官宿舍,堆是士兵宿舍,军官有其统领的士兵,堆中的士兵供栈中的军官调遣。

所谓栈中的军官,其本质是堆空间的访问地址,通过这个访问地址,能访问到堆中不同的部队。


public class TuanZhang {
	 String qibinglian;
	 String jingweiyuan;	 
	 TuanZhang laoli = new TuanZhang();
}

在上面的这段代码中,定义了一个团长类,团长这个类具有骑兵连跟警卫员这两个属性,团长可以调遣这两个属性,当我们实例化一个团长类的对象老李,JVM做了两件事:
1.在栈内存中保存了老李这个地址,这个地址对应着堆内存中,老李的警卫员和骑兵连。

2.new 关键字,在堆内存中开辟了一块空间,存老李的骑兵连 和 警卫员,如图所示。
在这里插入图片描述图中老李指向了属于他的部队所在。

public class TuanZhang {
	String qibinglian;
	String heshang;	 

	public static void main(String[] args) {
		TuanZhang laoli = new TuanZhang();
		TuanZhang dingwei = null;
		dingwei = laoli;    //让老丁具有和老李一样的指挥权
	}
}

在这段代码中,实例化了两个对象,所不同的是,老李的部队是由new 关键字创建出来的,丁伟的部队实际就是老李的部队,并没有额外在堆内存中开辟新的空间,所以可以理解为一个团里有两个团长,他们都有调遣部队的权力,如下图所示。
在这里插入图片描述这里无论是老李 还是 丁伟,对这两个属性的操作都将保存下来,两个团长操作的是一支部队。

总结:栈内存里保存的是引用对象,对内存中保存着基础变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值