JAVA数组的内存解析

JAVA数组的内存解析

数组这个概念大家都不陌生但是你知道他在内存中是什么样的吗?

内存中各个分区解析

内存中分为栈区堆区和方法区具体如下图所示
在这里插入图片描述
知道了内存中的一些结构我们才能对数组在内存中进行解析。

数组内存解析

我们看如下一段代码

int []arr=new int[]{1,2,3};
String []arr1=new String[4];
arr1[1]="小明";
arr1[2]="张三";
arr1=new String[3];

这段代码在内存中是如何运行的呢?
在这里插入图片描述
代码开头两句先在栈区先后创建两个局部变量arr,arr1,在堆区开辟相应的内存空间,并对其进行初始化,arr在代码中已经初始化,arr1由于是引用类型所以初始化为null同时将堆区的地址传给arr,arr1。再看三四两句给arr1的第二和第三个元素赋值

在这里插入图片描述

最后一行代码又新开辟了一个有三个连续元素的数组将他的地址值赋值给arr1此时arr1不指向之前的数组而指向新的数组。之前所开辟的数组空间将会在一个不确定的时间被清理。然后main方法结束之后arr1出栈0x12ab这块空间也将会被回收,arr出栈同样的0x1234也会被回收。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温JZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值