9.3 JAVA数组在内存中是什么样子

数组在java中用来存储基础类型(int char float等)或引用。
当一个对象通过new创建时候,在堆中一块内存区域被分配,它的引用被返回。这个规则对数组也适用,因为数组在java中也是对象。

1.单维数组

int arr [] = new int[3]l

int[] arr 只是对三个整数数组的引用。如果你创建一个10个int类型的数组,是相同的,同样一个数组被分配,它的引用被返回。

数组内存分配

2.二维数组

那么二维数组怎么样那,实际上,我们在Java中只存在一维数组,二维数组只是数组的一维数组。

int[ ][ ] arr = new int[3][ ];
arr[0] = new int[3];
arr[1] = new int[5];
arr[2] = new int[4];
二维数组

多维数组和上图类似。

它们存储在内存的什么位置

数组也是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被调用的时候,新的frame(Frame-1)被push进栈中,本地变量i同样被在frame-1中创建。
2、当m2在m1中被调用的时候,另外一个frame(frame-2)被push进栈中。
在m2中,一个叫classA的对象被在堆中创建,引用a被put进frame2中。现在,栈和堆如下图所示:

image.png

数组和对象类似,也是在内存中直接创建的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,764评论 18 399
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,366评论 11 349
  • Java byte code 的学习意义 为啥要学java bytecode,这就跟你问我已经会python了为...
    shanggl阅读 1,699评论 0 3
  • 我是一个三线城市的青年,在一次很偶然的情况下知道了简书,在里面看到了好多牛人,比如彭小六、剽悍一只猫、无戒等等,他...
    马尔代夫的驴阅读 617评论 4 8
  • 人最多的地方是地铁,最寂寞的人是地铁里的乘客。 ----作者按 一个人最好的陪伴是什么?当然是自己。 如果说人最好...
    陈川Lethe阅读 393评论 2 0