数组常见问题
索引越界
访问超出范围的索引会抛 ArrayIndexOutOfBoundsException:
java
int[] arr = {1, 2, 3};
// ❌ 越界访问
// System.out.println(arr[3]); // ArrayIndexOutOfBoundsException
// ✅ 正确访问
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}有效索引范围是 0 到 length-1。
空指针异常
对 null 数组操作会抛 NullPointerException:
java
int[] arr = null;
// ❌ 空指针
// System.out.println(arr.length);
// ✅ 使用前检查
if (arr != null) {
System.out.println(arr.length);
}长度不可变
数组创建后长度固定,不能直接扩展:
java
int[] arr = {1, 2, 3};
// ❌ 越界
// arr[3] = 4;
// ✅ 扩容:创建新数组
int[] newArr = new int[arr.length + 1];
System.arraycopy(arr, 0, newArr, 0, arr.length);
newArr[3] = 4;
System.out.println(Arrays.toString(newArr));如果需要动态大小,考虑使用 ArrayList。
引用传递
数组作为参数传递时是引用传递,修改会影响原数组:
java
public class ArrayAsParameterDemo {
public static void main(String[] args) {
int[] numbers = {1, 2, 3};
modifyArray(numbers);
System.out.println(Arrays.toString(numbers)); // [100, 2, 3]
}
static void modifyArray(int[] arr) {
arr[0] = 100; // 修改会影响原数组
}
}常见错误对照
| 错误 | 原因 | 解决方案 |
|---|---|---|
| ArrayIndexOutOfBoundsException | 索引越界 | 检查索引范围 0 ~ length-1 |
| NullPointerException | 数组未初始化 | 使用前检查 != null |
| 数组长度不足 | 需要扩容 | 创建新数组,用 System.arraycopy 复制 |
