Java 堆栈存储问题

Java 中的数据类型分为两大类型 基本类型和引用类型

在这里插入图片描述
在这里插入图片描述
下面我们来分析一下, 首先是 char a = ’ h ';
char是基本数据类型又是类的成员变量,所以在堆中;
从mian方法开始 Person person = new Person(“张三”,18);
person的 new 的实体化对象 存储到堆里,栈里存的是 引用名称person 和person实体化对象在堆中的地址;
然后add()方法中 int age = 18; 虽然 是基本数据类型,但基本数据类型是在方法中定义的,是局部变量所以它存贮到栈中。
然后 Person person1 = new Person(“李四”,age);
只要是 new 出来的 他们的实体对象都存贮到 堆中, 栈中存的是 他们的引用名称和地址。

栈的存取速度比堆要快。数据一执行完毕,变量会立即释放,节约内存空间
Java的栈主要存储 类的局部变量 方法函数 ,对象的引用变量。

堆内存中的实体不再被指向时,JVM启动垃圾回收机制,自动清除,这也是JAVA优于C++的表现之一
堆主要存储实例化的对象, 基本数据类型,数组也存到栈中

1.基本类型

基本类型包括:byte、short、 int 、long 、 char、 float、 double 、boolean;
1 . 如果这些变量时写在类中的,即类的成员变量,便会随着类对象的实例化,存贮到堆中,
2.如果这些变量是写在方法中,即局部变量,每当程序调用方法时,系统都会为该方法建立一个方法栈,其所在方法中声明的变量就放在方法栈中,当方法结束系统会释放方法栈,其对应在该方法中声明的变量随着栈的销毁而结束,这就局部变量只能在方法中有效的原因。

2.引用类型

引用类型是除基本类型之外的所有变量都是引用类型,包括类接口等。
1.引用类型的实体全部都存著到堆中,他们的变量引用(变量名称),存储到栈中,栈中存的是对象在堆中的地址。而真正的数据都是在堆中的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值