java的对象内存和数据类型
一、三种情况的对象内存图
(1)Java内存分配介绍:
-
栈:
-
队:
-
方法区(jdk7):加载字节码文件、(从jdk8开始取消方法区,新增元空间,把原来方法区的多种功能进行拆分,有的功能放到堆中,有的功能放到元空间中)
-
本地方法区:
-
寄存器:
(2)一个对象的内存图
Student s = new Student();
-
加载class文件:把student类的字节码文件加载到方法区
-
声明局部变量:对s进行声明
-
在堆内存中开辟一个空间:new关键字在堆里面开辟一个空间,这个空间就是对象(放在一个地址值中)
-
默认初始化:对第3部进行赋值
-
显示初始化:对第3部进行赋值
-
构造方法初始化:对第3部进行赋值
-
将堆内存中的地址值赋值给左边的局部变量
eg:
study执行后出栈,main方法执行完毕出栈,main里面的变量也会消失,mian里面的指向也会消失,当main没有任何东西指向堆内存的时候,堆内存存储的变量和相应的值也会消失变成垃圾
(3)多个对象的内存图
注意:s1和s2两个空间互相独立,不会相互影响。s1.study和s2.study调用完毕后会进行出栈处理,main方法执行完毕出栈,s1和s2没有任何东西调用堆内存会消变成垃圾
(4)两个引用变量指向同一个对象内存图:
stu1被stu2覆盖,相应的值也会发生改变
此时堆内存没有任何东西指向,堆内存里面的变量声明消失,然后买呢方法执行完毕进行出栈
二、基本数据类型和引用数据类型
(1)基本数据类型:在变量中存储的是真实的数据的值
-
整数类型
-
浮点数类型
-
布尔类型
-
字符类型
(2)引用数据类型:在代码当中创建的任意对象和数组都是引用数据类型
引用数据类型:使用其他空间的数据
eg1:
eg2:
总结:
1. 基本数据类型:
数据值存储在自己的空间中
特点:赋值给其他变量也是赋的真实的值
2.引用数据类型:
数据值是存储在其他空间中,自己空间中存储的是地址值