一个java数组在内存中是什么样的

在java中数组有两种存储类型,一种是原始值(int,char等)或者是引用类型(或者叫指针)。

当一个对象通过new被创建时,会在堆上分配内存并返回引用,这对数组也是成立的,因为数组也是对象。

一维数组

int arr[] = new int [];

这个int[] arr 只是类型为Integer,个数为3的数组的引用。如果你创建了10个整型的数组,它是同一个数组被分配,并返回引用。


二维数组

二维数组是什么样子的呢,实际上,在java中只有一维数组,二维数组基本上只是一维数组的数组
int[ ][ ] arr = new int[3][ ];
arr[0] = new int[3];
arr[1] = new int[5];
arr[2] = new int[4];


对于多维数组也是如此

他们在内存中是怎么被分配的呢

在java中万事万物皆对象,不例外,数组在java中也是对象,那么在内存中对象是如何在数组中应用的呢
我们知道,JVM运行的数据域包括堆、栈等,对于下边这个简单的例子,我们来看一下数组和它的引用是怎么存储的。

class A {
	int x;
	int y;
}
 
...
 
public void m1() {
	int i = 0;
	m2();
}
 
public void m2() {
	A a = new A();
}
 
...

上边我们已经声明了一个类,那么当我们调用m1()看看会发生什么
当m1()被调用时,一个新的片(Frame-1)被压入到栈里边,同时在Frame-1中局部变量也被创建。然后m2()在m1()中被调用,另一个新的(Frame-2)也被压入栈,在m2中,在堆中classA的对象被创建,同时引用变量也放在了Frame-2中,到现在为止,栈和堆的形态如下:


数组的创建过程和对象的一样,所以数组在内存中是如何的就一目了然了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值