java二维数组的内存解析-经典(尚硅谷记录)

本文详细解析了Java中二维数组的内存分配过程,包括创建、初始化以及元素赋值等步骤,涉及栈和堆空间的交互。通过实例分析了二维数组在内存中的布局和访问方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、java二维数组内存解析过程

main方法中的代码如下:

 

(1) 第一行的执行情况:int[][] arr1= new int[4][];

  • 左边运算:放在方法中的变量都叫做局部变量,故 “=”左侧的arr放在栈(stack)中
  • 右边运算:“=”右侧的new结构,按照1中简化结构规则放在堆(heap)中; 故 int[4][]会再堆里申请4个连续的结构存值,为二维数组的外层元素(此时赋默认值null,由于此时申请的是int[]类型的);然后连续空间会有一个首地址值,假如为 0x1234
  • 赋值运算:将地址0x1234赋值左侧栈空间变量arr1,所以arr1能够找到堆空间数组;完成了栈指向了堆;

图示例

 (1) 第二行的执行情况:arr1[1] = new int[]{1,2,3};

  • 左边运算:放在方法中的变量都叫做局部变量,故 “=”左侧的arr放在栈(stack)中
  • 右边运算:“=”右侧的new结构,按照1中简化结构规则放在堆(heap)中; 故 int[]{1,2,3}会在堆里申请3个连续的结构存值,为二维数组的内层元素,(此时赋默认值0,由于此时申请的是int类型的);然后连续空间会有一个首地址值,假如为 0x7788
  • 赋值运算:将二维数组堆内层元素的数据1,2,3地址0x7788赋值堆空间二维数组外层元素arr1[1],所以arr1[1]能够找到堆空间二维数组数据1,2,3

  (3) 第3行的执行情况:arr1[2] = new  int[4];

  • 右边运算:“=”右侧的new结构,按照1中简化结构规则放在堆(heap)中; 故 new int[4]会在堆里申请4个连续的结构存值(此时赋默认值不确定);然后连续空间会有一个首地址值,假如为 0x6677
  • 赋值运算:将一维维数组元素赋值给二维数组外层元素arr1[2],所以arr1[2]能够找到新申请的空间 int[4]首地址0x6677(因为是int[][]此时赋值0,由于此时申请的是int类型的)

 

  (4) 第4行的执行情况:arr1[2][1] = 30;

  • 赋值运算:30赋值给arr1[2][1]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值