• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

gabiandlizzy

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

java数组的内存结构

我们以代码为例说明:

一 静态初始化数组
int[] arr = new int[]{1, 2, 3};

执行这段代码,首先在栈中加载局部变量arr,然后在堆中开辟一段连续的3个元素的空间,这块空间第一个元素会有一个16进制的首地址值,然后将首地址值赋给局部变量arr(其实这也是一种简单的指针),从而建立局部变量和堆空间的联系。一开始每个元素都是默认值0,然后再赋成1、2、3。

二 动态初始化数组
String[] arr1 = new String[4];
arr1[0] = "Dane";
arr1[1] = "Dehaan";
arr1 = new String[3];

执行这段代码,仍然首先在栈中加载局部变量arr1,后面都一样,注意默认值为null,然后再显式地给arr1[0]和arr[1]赋值。
最后这句代码如何执行呢?只要出现new,就在堆内存开辟空间,仍然得到首地址值,把这个值赋给arr1。
思考,此时输出arr1[1]结果应当为?
答案是null

posted on 2022-04-05 15:58  大妖怪金角大王  阅读(84)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3