Java千百问_06数据结构(014)_java数组如何存储在内存中
2016-05-14 10:07
721 查看
点击进入_更多_Java千百问
了解什么是数组看这里:java中的数组是什么
当仅定义一个数组变量(int[] numbers)时,该变量还未指向任何有效的内存,因此不能指定数组的长度,只有对数组进行初始化(为数组元素分配内存空间)后才可以使用。
数组初始化分为静态初始化(在定义时就指定数组元素的值,此时不能指定数组长度)和动态初始化(只指定数组长度,由系统分配初始值)。
建议不要混用静态初始化和动态初始化,即不要既指定数组的长度的同时又指定每个元素的值。
当初始化完毕后,就可以按索引位置(0~array.length-1)来访问数组元素了。
当使用动态初始化时,如在对应的索引位未指定值的话,系统将指定相应数据类型对应的默认值(整数为0,浮点数为0.0,字符为’\u0000’,布尔类型为false,引用类型(包括String)为null)。
结果如下:
Miracle Miracle He null
Miracle Miracle He null
数组引用变量是存放在栈内存(stack)中,数组元素本质是一个对象,是存放在堆内存(heap)中。通过栈内存中的指针指向对应元素的在堆内存中的位置来实现访问。
了解堆和栈看这里:[java堆和栈有什么区别][3]
[3]:
当数组在初始化时,就会在堆中分配对应的空间,这个大小是不会因为内部元素的变化而变化,也就是说,如果数组中某个元素被清空,数组占用的内存空间也不会缩小。
存放引用类型数组在内存中如何储存看这里:引用类型数组在内存中如何储存
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]:
当数组在初始化时,就会在堆中分配对应的空间,这个大小是不会因为内部元素的变化而变化,也就是说,如果数组中某个元素被清空,数组占用的内存空间也不会缩小。
存放引用类型数组在内存中如何储存看这里:引用类型数组在内存中如何储存
相关文章推荐
- 3364 数据结构实验之图论八:欧拉回路
- 链表的应用
- 【数据结构】栈和队列
- 算法基础 - 并查集
- 数据结构与算法分析(2)算法效率问题引入与递归简论
- KMP算法详解
- 三维形体的数据结构(1)半边数据结构
- 【33】二叉树的镜像
- sdutoj 3363 数据结构实验之图论七:驴友计划 (暴力深搜最短路)
- sdutoj 3363 数据结构实验之图论七:驴友计划
- erlang 常用数据结构
- 数据结构域算法基础 一
- 【数据结构】两个队列实现一个栈
- 数据结构-前序遍历、中序遍历、后序遍历、层级遍历(递归、非递归)
- 数据结构和算法 – 4.字符串、 String 类和 StringBuilder 类
- 【数据结构】位图BitMap、布隆过滤器的算法实现
- 数据结构与算法——B树的C++实现
- 浅谈关于递归的一些感悟
- 数据结构总结
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现