程序员基础的16课 1 数组与内存控制
来源:互联网 发布:思科基于mac的acl 编辑:程序博客网 时间:2024/06/08 00:02
一 数组与内存控制
1.1 数组初始化有以下两种方式
静态初始化:初始化时由程序员显示指定每个数组元素的初始值,由系统决定数组的长度; 动态初始化:初始化时程序员只指定数组的长度,由系统为数组元素分配初始值。
Java数组是静态的,一旦初始化完成,数组元素的内存空间分配也完成,程序只能改变数组元素的值,不能改变数组的长度。需要指出的是Java数组变量是一种引用类型的变量,数组变量并不是数组本身,它指向堆内存中的数组对象。
当执行books=names语句,books数组变量变为指向names数组对象,原来的数组对象依然存在,长度是4,books和names将指向同一个数组对象,没有任何数组变量指向的数组对象,将会变成垃圾,等待垃圾回收器来回收。
1.2 始终记住一点,Java数组变量是引用类型的变量,它并不是数组对象本身,只要让数组变量指向有效的数组对象,程序中就可以使用该数组对象。
数组变量,类似于c中的指针,通常存放在栈内存中(也可以存放在堆内存中); 数组对象,是存放在堆内存中的一块连续的空间。该连续空间的长度,就是数组的长度。
1.3 基本类型数组的初始化
基本类型数组的初始化,数组元素的值,直接存放在对应的数组元素中,程序先为数组分配内存空间,再将数组元素的值,存放在对应内存里。
所有局部变量都存放在栈内存中,但引用类型变量所对应的对象,则总存在堆内存中。
1.4 引用类型数组的初始化
引用类型数组的数组元素依然是引用类型,因此数组元素中存储的还是引用,它指向另外一块内存,该内存中存储了该引用变量所引用的对象。
1.5 一个比较极端的情况,考虑内存的分配情况
// 定义并初始化一个Object数组 Object[] objArr = new Object[3]; // 让objArr所引用的数组的第二个元素再指向一个长度为2的Object数组 objArr[1] = new Object[2]; // 将objArr[1]的值赋值给objArr2,即让objArr[1]和objArr2指向同一个数组对象 Object[] objArr2 = (Object[])objArr[1]; // 让objArr2所引用的数组的第二个元素再指向一个长度为3的Object数组 objArr2[1] = new Object[3]; // 将objArr2[1]的值赋值给objArr3,即让objArr2[1]和objArr3指向同一个数组对象 Object[] objArr3 = (Object[])objArr2[1]; // 让objArr3所引用的数组的第二个元素再指向一个长度为5的int数组 objArr3[1] = new int[5]; // 将objArr3[1]的值赋值给iArr,即让objArr3[1]和iArr指向同一个数组对象 int[] iArr = (int[])objArr3[1]; // 依次为iArr的每个元素赋值 for (int i = 0; i < iArr.length; i++) { iArr[i] = i * 3 + 1; } // 直接通过objArr访问iArr数组的第三个元素 System.out.println(((int[])((Object[])((Object[])objArr[1])[1])[1])[2]);
0 0
- 程序员基础的16课 1 数组与内存控制
- java 基础概念 -- 数组与内存控制
- 数组与内存的控制
- 数组与内存控制
- 数组与内存控制
- 数组与内存控制
- 数组与内存控制
- 数组与内存控制
- JAVA程序员基本功之数组与内存控制
- 数组与内存内存控制
- 深化Java基础之——数组与内存控制
- Java基础1--Java里的数组,内存与引用
- java数组与内存控制
- Java数组与内存控制
- Java数组与内存控制
- java 数组与内存控制
- Java数组与内存控制
- Java数组与内存控制
- jQuery 1.9使用$.support替代$.browser的使用方法
- 养老保险断缴增加 什么时候降低社保费率
- 【maven+junit】 java生成指定为位数的随机密码
- 使用javamail发信过程中的一些问题及解决方法
- hdu2537
- 程序员基础的16课 1 数组与内存控制
- vdeavrgtrgfgtyhyb
- PAT 数据结构 03-树2. List Leaves (25)
- npm should be run outside of the node repl, in your normal shell
- SPI Flash是什么?
- 迄今为止最优的Eclipse运行性能调优 ,含eclipse.ini
- python 中得 “=”
- v4l2参数一览
- 简单思路做游戏----俄罗斯方块