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.引用类型的实体全部都存著到堆中,他们的变量引用(变量名称),存储到栈中,栈中存的是对象在堆中的地址。而真正的数据都是在堆中的。