深圳Java培训
达内深圳宝安中心

136-3244-2201

热门课程

【达内JAVA教程】如何把Java数组存放在内存中

  • 时间:2016-06-21
  • 发布:达内
  • 来源:达内

对于很多初学者或者入门不久的java开发人员来说,如何把Java数组存放在内存中成了一个大的问题,今天,深圳java培训(sz.java.tedu.cn)专家和大家共同学习一下:

Java中有两种类型的数组:

  • 基本数据类型数组;

  • 对象数组;

当一个对象使用关键字“new”创建时,会在堆上分配内存空间,然后返回对象的引用,这对数组来说也是一样的,因为数组也是一个对象;

一维数组

int[] arr = new int[3];

在以上代码中,arr变量存放了数组对象的引用;如果你创建了空间大小为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被创建并push到栈中,同时局部变量i也在栈帧Frame-1内创建。

然后,m2方法在m1方法内部被调用,栈帧Frame-2被创建并push到栈中,在m2方法中,一个新的对象A在堆中被创建,而它的引用则被put到栈帧Frame-2里;

现在内存中堆和栈的大致情况如下图:

内存中堆和栈

数组同样是对象,所以数组和对象以及引用在内存中的分布如上所示。

如果你还有这些疑问欢迎咨询深圳java培训(sz.java.tedu.cn)专家。
如果想学习的同学可以参加深圳达内JAVA培训,免费试听,或周末免费参加深圳JAVA培训公 开课程试听,这里有强大的师资阵容,“师者,所以传道授业解惑也”,讲师,是教育的主体,是影响整体办学质量、学员学习质量的重要因素。所以深圳达内 JAVA培训竭尽全力为学员提供最强大的师资力量,让学员接受最好的教育,学习最前沿的技术。掌握一门牛逼闪闪技术,待遇自然不在话下。

上一篇:【达内职场秀】java开发工程师薪水多少合适?
下一篇:达内教育受邀出席第十四届中国国际软交会

为什么 Java 是适合 I0T 的语言

编程语言排行榜

【达内职场秀】如何通过面试官去了解企业

【达内JAVA教程】Java与C/C++的区别

选择城市和中心
贵州省

广西省

海南省