Java基础——数组1
一、数组

1.1 什么是数组
📚 定义:
数组(Array) 是一种存储相同类型元素的有序集合,具有固定的长度和连续的内存空间。
🧩 特点:
- 同类型:所有元素必须是同一数据类型(基本类型或引用类型);
- 固定长度:一旦创建,长度不可变;
- 索引访问:通过整数索引(从
0开始)快速访问元素; - 连续存储:在内存中占用连续空间,支持随机访问(O(1) 时间复杂度)。


1.2 数组的定义语法与静态初始化
定义语法:
数据类型[] 数组名;
// 或
数据类型 数组名[];
静态初始化(声明时直接赋值):
int[] scores = {85, 92, 78, 96, 88}; // 直接指定值
String[] names = {"Alice", "Bob", "Charlie"};✅ 编译器自动推断数组长度:scores.length = 5

1.3 数组元素访问
数组的地址值:


访问方式:
使用索引(index)访问元素,索引从 0 开始。
数组名[索引]
int[] arr = {10, 20, 30, 40};
System.out.println(arr[0]); // 输出:10
System.out.println(arr[3]); // 输出:40常见错误:数组越界
System.out.println(arr[5]); // ❌ ArrayIndexOutOfBoundsException✅ 检查边界:
if (index >= 0 && index < arr.length) {System.out.println(arr[index]);
}1.4 数组遍历

方法一:传统 for 循环(带索引):
int[] arr = {1, 2, 3, 4, 5};
for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);
}🔹 方法三:while 循环:
int i = 0;
while (i < arr.length) {System.out.println(arr[i]);i++;
}1.5 数组的动态初始化
动态初始化:先声明长度,再逐个赋值:

int[] arr = new int[5]; // 创建长度为 5 的数组
arr[0] = 10;
arr[1] = 20;
// ...虚拟机给出默认的初始化值
🔹 默认值:
- 基本类型:
int→0,double→0.0,boolean→false,char→\u0000 - 引用类型:
null

1.6 数组的内存图




arr是引用变量,存储的是数组对象在堆中的首地址;- 数组对象在堆中连续存储;
- 修改数组内容会影响堆中数据,不影响栈中引用。


1.7 数组的常见问题
❌ 问题 1:数组越界异常
int[] arr = new int[3];
System.out.println(arr[3]); // ❌ IndexOutOfBoundsException❌ 问题 2:空指针异常(未初始化就访问)
int[] arr;
System.out.println(arr[0]); // ❌ NullPointerException
// 必须先初始化:arr = new int[5];❌ 问题 3:混淆 = 和 ==
int[] a = {1, 2};
int[] b = {1, 2};
System.out.println(a == b); // ❌ false!比较的是引用地址
System.out.println(Arrays.equals(a, b)); // ✅ true✅ 使用 Arrays.equals() 比较数组内容。
❌ 问题 4:修改数组长度
int[] arr = new int[5];
arr.length = 10; // ❌ 编译错误!length 是 final 字段✅ 若需可变长度,应使用 ArrayList。
