Java数组的内存解析

文章详细解释了Java中一维和二维数组在内存中的解析,包括栈和堆的使用。动态和静态初始化数组的例子展示了如何在堆中分配空间,并强调了数组元素的默认值、地址生成以及失去引用后的垃圾回收。同时指出,String类型的实例存储在方法区的静态域中。
摘要由CSDN通过智能技术生成

1.数组的内存解析:

1.1 一维数组内存解析:

(1)栈(stack)和堆(heap)结构:
  • 栈(stack):局部变量;
  • 堆(heap):new出来的结构:对象、数组;

①代码举例:

//举例一:(动态初始化)
int [] num = new int[4];  //动态初始化定义一个数组
//数组元素调用并赋值
num[0] = 1;
num[1] = 2;

String [] name = new String[4];
//数组元素调用并赋值
name [0] = "阿坤";
name [1] = "阿杰";
name [2] = "阿红";
  • 内存解析如下:
    在这里插入图片描述
//举例二:(静态初始化)
//int类型数组
int [] ages = new int[4];    //数组的动态初始化
ages [0] = 22;
ages [1] = 23;
ages [2] = 21;

//String类型数组
String [] names = new String []{"王涛","阿杰","张三丰","猪八戒"};   //静态初始化
//注意可以写成:String [] names = {"王涛","阿杰","张三丰","猪八戒"};  
names = new String []{"孙悟空","唐僧","沙悟净"}; 
  • 内存解析如下:
    在这里插入图片描述

以上内存解析说明:
1.地址值是JVM中随机生成一个十六进制的数;
2.在数组元素显式赋值之前,数组元素都有默认值;
3.new之后,就是在堆空间内重新开辟一定的空间,并产生地址值;
4.失去指针所指的空间,将会在一定时间后,被垃圾回收机制所回收;
5.注意:String类型的数据其实不在堆空间内,而是在方法区的静态域中(其后会说明)

1.2 二维数组内存解析:

(二维数组实质上就可以看成是一维数组的元素任然是一维数组)

(1)堆和栈结构:
  • 栈(stack):存放局部变量;
  • 堆(heap):存放new出来的结构(数组、对象);
  • 方法区:静态域+常量池;(其后的String类会重点说明)

②代码举例:

//举例一:
int[][] arr1 = new int[4][];   //动态初始化,定义一个二维数组
arr1[1] = new int[]{1,2,3};    
arr1[2] = new int[4];
arr1[2][1] = 30;
  • 内存解析如下:
    在这里插入图片描述
//举例二:
int[][] arr1 = new int[4][];  
arr1[0] = new int[3];
arr1[1] = new int[]{1,2,3};
arr1[0][2] = 5;
arr1 = new int[2][];
  • 内存解析如下:

举例二:留给各位小伙伴来补充~~~~~~~~~~~~~~~~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值