1、栈和堆
1、概述
JVM内存模型图(自己画的草图)
运行java文件执行顺序图
栈、堆都是在JVM内存控件中的一个内存区,JVM是电脑内存中分出来的一部分内存
2、栈、堆的存储对象
package com.wuzhy.opp.JVM;
public class Test {
public static void main(String[] args) {
/**
* main方法是程序的入口
* 在方法中添加局部变量后,JVM运行完方法后,则会自动回收栈内存中的内容,堆则不会
* 栈存储基本类型变量时,是变量=值,存储引用变量时,是变量=堆的地址
* 堆存储引用变量的值
*/
//存储在栈中是a=1
int a=1;
//存储在栈中是a=0X001,堆中存储的是 0X001=1
Integer b=new Integer(1);
/**
* 当使用==对比时,会发现基本类型对比的是值,而引用类型对比的都是堆的存储地址,因为我们在栈内存中获取的对象是这样的
* 当equals时,如果你使用的引用类型对象使用的equals里面是重写的方法的话,那么经过里面的方法处理后,引用类型对比的也是值
* 一般自己写的class对象没有重写过equals,那仍然对比的是地址,就永远都不会是true
*/
//基本类型
int c=1;
int d=1;
System.out.println(c == d);
//每new一个变量都会在栈、堆中新增一个对象
String str=new String("你好");
String string=new String("你好");
System.out.println(str==string);//false
System.out.println(str.equals(string));//true.
//自己写的class对象
Teacher teacher1=new Teacher();
Teacher teacher2=new Teacher();
System.out.println(teacher1.equals(teacher2));//false
System.out.println(teacher1==teacher2);//false
}
}
class Teacher{
}