加载中...

java的对象内存和数据类型

一、三种情况的对象内存图

(1)Java内存分配介绍:

  1. 栈:
  2. 队:
  3. 方法区(jdk7):加载字节码文件、(从jdk8开始取消方法区,新增元空间,把原来方法区的多种功能进行拆分,有的功能放到堆中,有的功能放到元空间中)
  4. 本地方法区:
  5. 寄存器:

(2)一个对象的内存图

Student s = new Student();
  1. 加载class文件:把student类的字节码文件加载到方法区

  2. 声明局部变量:对s进行声明

  3. 在堆内存中开辟一个空间:new关键字在堆里面开辟一个空间,这个空间就是对象(放在一个地址值中)

  4. 默认初始化:对第3部进行赋值

  5. 显示初始化:对第3部进行赋值

  6. 构造方法初始化:对第3部进行赋值

  7. 将堆内存中的地址值赋值给左边的局部变量

eg:

study执行后出栈,main方法执行完毕出栈,main里面的变量也会消失,mian里面的指向也会消失,当main没有任何东西指向堆内存的时候,堆内存存储的变量和相应的值也会消失变成垃圾

(3)多个对象的内存图

注意:s1和s2两个空间互相独立,不会相互影响。s1.study和s2.study调用完毕后会进行出栈处理,main方法执行完毕出栈,s1和s2没有任何东西调用堆内存会消变成垃圾

(4)两个引用变量指向同一个对象内存图:

stu1被stu2覆盖,相应的值也会发生改变

此时堆内存没有任何东西指向,堆内存里面的变量声明消失,然后买呢方法执行完毕进行出栈

二、基本数据类型和引用数据类型

(1)基本数据类型:在变量中存储的是真实的数据的值

  1. 整数类型

  2. 浮点数类型

  3. 布尔类型

  4. 字符类型

(2)引用数据类型:在代码当中创建的任意对象和数组都是引用数据类型

引用数据类型:使用其他空间的数据

eg1:

eg2:

总结:

1. 基本数据类型:

数据值存储在自己的空间中

特点:赋值给其他变量也是赋的真实的值

2.引用数据类型:

数据值是存储在其他空间中,自己空间中存储的是地址值

特点:赋值给其他变量,赋的地址值,地址值存储的才是真实的数据
posted @ 2023-05-10 08:15  xiaoxiao1024  阅读(13)  评论(0编辑  收藏  举报