Java数组及其内存管理数组及其内存管理
数组是一个复合数据结构,当需要多个类型相同的变量时,可以定义数组惊醒使用。在java中,数组变量是一个引用类型
的变量。java 中的数组是 静态的 ,即初始化后,它索占的内存空间、数组长度是不变的。而且必须先 初始化 后使用。
数组的初始化方式:
· 静态初始化:初始化是指定数组的元素的值,由系统决定其长度。
String[] datas = new String[]{"java","C++","html"};
· 动态初始化:指定长度,由系统为数组元素分配初始值。
String[] datas = new String[5];//指定长度为5,系统为每个元素指定初始值为null
初始值分配规则:
注:不要同时使用静态和动态初始化,即同时指定数组长度和元素初始值
2.数组的内存分析
如下定义三个数组并初始化:
//1.静态初始化一
String[] books = new String[]{
"疯狂java 讲义",
"轻量级javaee企业应用实战",
"疯狂ajax讲义",
"疯狂XNL讲义"
};
System.out.println("第一个数组的长度为:" + books.length);// 4
//2.静态初始化二
String[] names = {
"孙悟空",
"猪八戒",
"白骨精"
};
System.out.println("第二个数组的长度为:" + names.length);// 3
//3.动态初始化
String[] strArr = new String[5];
System.out.println("第三个数组的长度为:" + strArr.length); // 5
上面采用两种静态和一种动态方式初始化数组,其长度分别为4、3、5,其内存分配如下:
数组变量存在栈区,数组对象存在堆内存,只能通过引用来访问堆内存中的数据。
数组一旦初始化完成后,其内存空间即分配结束,无法改变其长度,但可以修改其元素的值。但数组是一中引用类型的变
量,他只是指向对内存中的数组对象,可以改变其引用,从而造成其长度可变的假象,如下:
books = names;
System.out.println("books数组的长度为:" + books.length);
strArr = names;
System.out.println("strArr数组的长度为:" + strArr.length);
books[1] = "唐僧";