java数组是什么_内存中Java数组是什么样的?

本文介绍了Java数组的相关知识。Java数组可存储原始数值或引用,是对象。包括一维数组和二维数组的创建方式,二维数组是一维数组的一维数组。还阐述了数组在内存中的定位,其存储方式与对象相同,在内存中直线向前。

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

Java中的数组存储这两者中的一个:原始的数值,或者引用。

当使用"new"创建一个对象之后,在堆上被分配内存并且返回一个引用,对于数组也是如此,因为数组就是对象。

1.一维数组

int arr[] = new int[3];

int[] arr只是包含三个整型的数组的引用,如果你创建一个包含十个整型的数组,结果依然这样——一个数组被分配并且返回一个引用。

5f1e99713d24e229656b7d5317a9110b.png

2.二维数组

二维数组是怎样的呢?事实上,在Java中我们只有一维数组,二维数组只是一维数组的一维数组。(也就是一个一维数组,其中每一项都指向一个一维数组)。

int[ ][ ] arr = new int[3][ ];

arr[0] = new int[3];

arr[1] = new int[5];

arr[2] = new int[4];

23fad51adbf8b66316b0b093200ef97b.png

多维数组的原理也是一样的。

3.它们在内存中如何定位

数组同样也是Java中的对象,因此对象在内存中的存在同样适用于数组。

正如我们所知,JVM运行时数据区包括了堆,JVM栈以及其它内容。下面举一个简单例子来观察数组和它的引用如何存储。

class A {

int x;

int y;

}

...

public void m1() {

int i = 0;

m2();

}

public void m2() {

A a = new A();

}

...

有了上面的声明,让我们来调用m1()并且观察发生了什么:

1.当m1被调用时,一个新的帧(1号帧)入栈,并且本地变量在1号帧中被创建。

2.接下来在m1中调用m2,一个新的帧(2号帧)入栈,在m2里,堆中class A的一个新的对象被创建,并且它的引用被放入2号帧,现在这个时候,栈和堆看起来就像下面这样:

3b4deb70fa9ebf56f78ecad6f4fbfa11.png

数组和对象存储方式是一样的,所以数组在内存中是直线向前的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值