定义:包含同一类型数据的且固定长度的容器对象。
声明方式// 创建一个长度为5的整型数组
int[] arr1 = new int[5]; //默认20个初值都为0
int[] arr2 = new int[]{0, 1, 2, 3, 4};//直接赋值
// 通过下标为每个元素赋值
// 遍历、赋值
for (int value : arr1) {
arr1[value] = (int) (Math.random() * 10);
}
for (int i : arr1) {
System.out.println(i);
}
结果:
注:
- 声明时需要初始化数组大小,初始化过程就是内存分配过程,一旦初始化完成,在内存的空间就固定下来了。即使其中部分元素被清除,其占用的空间依然保留。因此,数组长度不可变。
要想改变数组的空间就必须对数组扩容。
数组扩容:创建一个新的数组,进行数据拷贝,达到“扩容”的目的数组本质是一个对象,其引用指向数组首个元素的内存地址数组的引用变量,也叫数组变量,存放在栈(stack)内存中,数组对象存放在堆(heap)内存中,通过栈内指针指向对应元素在堆内存中的位置实现访问
(数组变量就是一个引用,存放的是内存地址,相当于给某块内存取了个别名,方便我们记忆)数组的复制操作需要逐个将元素进行复制,不能简单的将变量名直接进行复制(只是栈内存中存储的引用改变,堆内存并没有开辟新的内存空间)
- length属性:
数组一旦定义,长度就不可变,因此可将数组长度作为数组的一个属性String的length()方法:
字符串的底层使用char型数组实现,对于数组,本身就有length属性,因此,对于字符串来讲就可以直接使用,而没必要再去定义这样一个属性,直接通过方法得到即可,即length()方法。
Arrays工具类:对数组进行封装的一个类,提供大量操作数组的方法
使用copyof()对数组实现扩容操作,第二个参数为新数组的大小
System.out.println("original arr2:");
for (int i : arr2) {
System.out.println(arr2[i]);
}
System.out.println("After Resize...");
System.out.println("arr3:");
// 数组扩容
int[] arr3 = Arrays.copyOf(arr2, 10);
for (int i : arr3) {
System.out.println(arr3[i]);
}
结果:
将删除位置元素后面的所有元素统一向前复制,用后一个元素的值覆盖前一个
如果直接将该位置的值置为null,则遍历时可能会报空指针异常



