数组是引用类型的数据类型
特点:
1、长度固定
2、存放数据类型相同
3、数组必须先进行初始化才能使用
如果定义数组变量时没有进行初始化、系统会为数组赋默认值
整数类型-byte、short、int、long,默认值是 0
浮点类型-float、double ,默认值是 0.0
字符类型-char ,默认值是 ‘\u0000’
布尔类型-boolean,默认值是 false
引用类型-类、接口、数组,默认值是 null
–下面来看数组在内存中是怎么存放的
public class InitArray {
public static void main(String[] args) {
//1、动态初始化,我们指定数组长度,系统自动赋默认值
int[] b = new int[5];
//2.静态初始化,我们赋初值、系统自动决定数组长度
int[] a = {33,44,55};
System.out.println("------a.length="+a.length);
System.out.println("------b.length="+b.length);
b = a;//
System.out.println("------b.length="+b.length);
}
}
输出:
------a.length=3
------b.length=5
------b.length=3
可以看出数组b的长度有变化,并不是数组b变小了,而是数组引用变量b指向了a数组,输出的其实是a的数组长度
上图:
当我们定义并初始化了数组a时,系统在内存中分配了两个空间,一个用来存放数组的引用变量-栈内存,一个用来存放实际数组值-堆内存,数组b是动态初始化也同理,只是数组值都是默认值0,栈中a、b变量存放的是数组在堆内存中的地址,也就是变量a、b分别指向这两个数组、如下图
当执行 b = a;时,是a把地址值付给了变量b,此时b指向数组a,所以b打印出来的长度是3,数组b失去了引用,变成垃圾,等待垃圾回收机制回收
Tip:
*当一个方法执行时、会建立自己的内存栈、方法里定义的遍历会逐个放入内存栈里、方法结束、内存栈自然销毁
- 程序中创建对象时、对象别保存到运行时数据区、也就是堆内存、堆内存中的对象不会随着方法结束被销毁,只有当对象没有任何引用变量引用它时才会别 垃圾回收机制回收*。