Java细节整理——数组与内存控制
重点:使用Java数组之前,必须对数组对象进行初始化。
当数组的所有元素都被分配了合适的内存空间,并指定了初始值时,数组的初始化完成。程序以后将不能重新改变数组对象在内存中的位置和大小。
知识点整理:
1.数组的初始化有以下两种方式:
1)静态初始化:初始化时由程序员显示指定每个数组元素的初始值,由系统决定数组的长度。
2)动态初始化:初始化时程序员只指定数组的长度,由系统为数组元素分配初始值。
不管使用哪种方式初始化Java数组,一旦初始化完成,该数组的长度就不可改变。
代码示例:
public class Demo { public static void main(String[] args) { // 采用静态初始化方式 String[] books = new String[] { "一千零一夜", "唐诗三百首", "警示寓言", "一个人的圣朝", }; // 采用静态初始化的简化形式 String[] names = { "小红", "小明", "小绿", }; // 采用动态初始化的的方式 String[] strArr = new String[5]; // 访问数组以上长度 System.out.println("第一个数组的长度是" + books.length); System.out.println("第二个数组的长度是" + names.length); System.out.println("第三个数组的长度是" + strArr.length); } }
Java语言的数组变量是引用类型的变量,books,names,strArr这3个变量以及各自引用的数组在内存中的分配如图:
总结:对于静态初始化方式而言,程序员无需指定数组长度,指定该数组的数组元素,由系统来决定该数组的长度即可。即names是3,books是4。
而执行动态初始化时,程序员只需指定数组的长度,即为每个数组元素指定所需的内存空间,系统将负责为这些数组元素分配初始值。指定初始值时,系统将按如下规则分配初始值:
1)数组元素的类型是基本类型中的整数类型(byte,short,int和long),则数组元素的值是0;
2)数组元素的类型是基本类型中的字符类型(char),则数组元素的值是'\u0000';
3)数组元素的类型是基本类型中的浮点类型(float,double),则数组元素的值是0.0;
4)数组元素的类型是基本类型中的布尔类型(boolean),则数组元素的值是false;
5)数组元素的类型是引用类型(类,接口和数组),则数组元素的值为null;