当前位置: 首页 > news >正文

【Java04】引用变量数组初始化的内存机制

引用类型数组指向的元素也是引用。其本质是:

  • 由一个在栈上的引用数组变量指向一块堆内存;
  • 这块堆内存里存储的元素是引用,又分别指向其他堆内存。
class Person // Person是一个自定义的类
{
  public int age;
  puiblic double height;
  public void info()
  {
    System.out.println("blablabla...");
  }
}
public class ReferenceArrayTest
{
  public static void main(String[] args)
  {
    Person[] students; // 声明一个数组引用变量,其元素是Person类的对象
    studens = new Person[2]; // 动态初始化
    var zhang = new Person(); // 对象的动态初始化
    zhang.age = 15;
    zhang.height = 158;
    var lee = new Person();
    lee.age = 16;
    lee.height = 161;
    students[0] = zhang; // 赋值,实际上是改变指向
    students[1] = lee;
    // 以下输出结果是一样的,因为指向的同一块内存
    lee.info();
    students[1].info();
  }
}
  • 第5行:数组声明,这时候只是在栈上定义了一个变量,没有指向堆内存,如下图所示:

在这里插入图片描述

  • 第6行:动态初始化,此时students的每个元素(数组引用变量,或者说就是指针)默认初始化为null,如下图所示:

在这里插入图片描述

  • 第7~12行:初始化两个对象,类也是引用类型,所以实际上开辟了4块内存:zhang和lee位于栈上,所指向的对象位于堆上。如下图所示:

在这里插入图片描述

  • 第13~14行:赋值,让students的两个元素(数组引用变量)分别指向zhang和lee指向的堆内存。

在这里插入图片描述

相关文章:

  • STL-常用容器
  • 10.Docker Compose容器编排
  • 学单片机前先学什么?
  • 树莓派4B_OpenCv学习笔记10:调整视频帧大小
  • Ubuntu 22.04 解决 firefox 中文界面乱码
  • 活动集锦 | 英码科技积极参与行业盛会,AI赋能城市数字化转型
  • Optional详解和常用API
  • 对LitJson开源插件的自定义尝试
  • EasyExcel文件导出,出现有文件但没有数据的问题
  • 揭开 Docker 容器的神秘面纱:深入理解容器原理
  • 【网络安全】【深度学习】【入侵检测】SDN模拟网络入侵攻击并检测,实时检测,深度学习【二】
  • JVM常用概念之线程本地分配缓冲区(ThreadLocal Allocation Buffer,TLAB)
  • 【双系统 安装ADB】
  • Oracle中select取值后的字符串处理
  • 跨服务器迁移 Redis 数据
  • Web前端开发12章:深入探索与实战解析
  • 在不使用js在情况下只用css实现瀑布流效果
  • Java项目之消息队列(手写java模拟实现mq)【七、⽹络通信协议设计、消息队列服务器端实现、客户端实现】✔ ★
  • Oracle复习部分记录
  • AWS无服务器 应用程序开发—第八章 计算服务(AWS Lambda)
  • 景点变回监狱,特朗普下令重新启用“恶魔岛”
  • 媒体:不能让追求升学率,成为高中不双休的借口
  • 巴基斯坦宣布禁止与印度的进口贸易
  • 人民日报头版:让青春之花绽放在祖国和人民最需要的地方
  • 江西望仙谷回应“游客凌晨等不到接驳车”:已限流,接驳车运行时间延长
  • 五一假期前两日,多地党政主官暗访景点、商圈安全工作