Skip to content

数组常见问题

索引越界

访问超出范围的索引会抛 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 复制

基于 VitePress 构建