您的位置:首页 > 理论基础 > 数据结构算法

Java千百问_06数据结构(014)_java数组如何存储在内存中

2016-05-14 10:07 721 查看
点击进入_更多_Java千百问

1、数组的内存空间是何时分配的

java中的数组是用来存储同一种数据类型的数据结构,一旦初始化完成,即所占的空间就已固定下来,初始化的过程就是分配对应内存空间的过程。即使某个元素被清空,但其所在空间仍然保留,因此数组长度将不能被改变。

了解什么是数组看这里:java中的数组是什么

当仅定义一个数组变量(int[] numbers)时,该变量还未指向任何有效的内存,因此不能指定数组的长度,只有对数组进行初始化(为数组元素分配内存空间)后才可以使用。

数组初始化分为静态初始化(在定义时就指定数组元素的值,此时不能指定数组长度)和动态初始化(只指定数组长度,由系统分配初始值)。

//静态初始化
int[] numbers = new int[] { 3, 5, 12, 8, 7 };
String[] names = { "Miracle", "Miracle He" };//使用静态初始化的简化形式
//动态初始化
int[] numbers = new int[5];
String[] names = new String[2];


建议不要混用静态初始化和动态初始化,即不要既指定数组的长度的同时又指定每个元素的值。

当初始化完毕后,就可以按索引位置(0~array.length-1)来访问数组元素了。

当使用动态初始化时,如在对应的索引位未指定值的话,系统将指定相应数据类型对应的默认值(整数为0,浮点数为0.0,字符为’\u0000’,布尔类型为false,引用类型(包括String)为null)。

public class TestArray {
public static void main(String[] args) {
String[] names = new String[3];
names[0] = "Miracle";
names[1] = "Miracle He";
/*
for(int i = 0; i < names.length;i++) {
System.out.print(names[i] + " ");
}
*/
//还可以使用foreach来遍历
for(String name : names) {
System.out.print(name + " ");
}
}
}


结果如下:

Miracle Miracle He null

Miracle Miracle He null

2、数组在内存中如何储存

首先给出数组(数组引用和数组元素)在内存中的存放形式,如图:



数组引用变量是存放在栈内存(stack)中,数组元素本质是一个对象,是存放在堆内存(heap)中。通过栈内存中的指针指向对应元素的在堆内存中的位置来实现访问。

了解堆和栈看这里:[java堆和栈有什么区别][3]

[3]:

当数组在初始化时,就会在堆中分配对应的空间,这个大小是不会因为内部元素的变化而变化,也就是说,如果数组中某个元素被清空,数组占用的内存空间也不会缩小。

存放引用类型数组在内存中如何储存看这里:引用类型数组在内存中如何储存
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: