天天看点

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

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

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

1

2

3

4

5

6

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

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

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

7

8

9

10

11

12

13

14

15

16

结果如下: 

miracle miracle he null 

miracle miracle he null

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

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

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

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

[3]: 

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

原文地址:http://blog.csdn.net/ooppookid/article/details/51404440