Skip to content

2026-08-27 · 固定长度、内存连续的数据容器。实际开发更多用集合(ArrayList),但数组是基础。

Java 数组

1. 数组介绍

  • 一段连续内存空间,存放相同类型的多个值
  • 长度固定,创建后不能增加或减少(想要动态大小用 ArrayList
  • 数组本身是对象,有 length 属性(不是方法,不用加括号)
java
int[] arr = {1, 2, 3};
System.out.println(arr.length); // 3(属性,不是 arr.length())

2. 数组声明与初始化

两种方式:

java
// 方式一:静态初始化(直接给值)
int[] nums = {10, 20, 30};
String[] names = {"张三", "李四", "王五"};

// 方式二:动态初始化(给长度,值为默认值)
int[] nums2 = new int[5];     // 5 个元素,默认值全是 0
String[] names2 = new String[3]; // 3 个元素,默认值全是 null

默认值表:

类型默认值
int/short/long/byte0
float/double0.0
booleanfalse
char'\u0000'(空字符)
引用类型(String等)null

3. 操作数组

访问与修改

java
int[] arr = {10, 20, 30};
System.out.println(arr[0]);  // 10(索引从 0 开始)
arr[1] = 99;                 // 修改第二个元素
System.out.println(arr[1]);  // 99

遍历

java
// 普通 for(需要索引时)
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

// for-each(只读取值,不需要索引)
for (int n : arr) {
    System.out.println(n);
}

数组复制

java
// 方式一:Arrays.copyOf(推荐)
int[] arr2 = Arrays.copyOf(arr, arr.length);

// 方式二:System.arraycopy(参数多但效率高)
int[] arr3 = new int[arr.length];
System.arraycopy(arr, 0, arr3, 0, arr.length);

// ❌ 不能直接赋值:int[] arr2 = arr;(只是引用同一个数组,改一个另一个跟着变)

4. Arrays 工具类

java.util.Arrays 提供常用数组操作方法:

java
import java.util.Arrays;

int[] arr = {5, 2, 8, 1, 9};

// 排序(升序)
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // [1, 2, 5, 8, 9]

// 转字符串(调试神器)
System.out.println(Arrays.toString(arr)); // [1, 2, 5, 8, 9]

// 填充
Arrays.fill(arr, 0); // 所有元素变成 0

// 复制指定长度
int[] arr2 = Arrays.copyOf(arr, 3); // [0, 0, 0]

// 二分查找(必须先排序!)
Arrays.sort(arr);
int index = Arrays.binarySearch(arr, 5); // 返回索引 2

最常用的是 sorttoStringcopyOf,记住这三个就够。

5. 二维数组

数组套数组,表格结构:

java
// 声明与初始化
int[][] matrix = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

// 访问:行索引 + 列索引
System.out.println(matrix[0][1]); // 2(第一行第二列)

// 遍历
for (int i = 0; i < matrix.length; i++) {
    for (int j = 0; j < matrix[i].length; j++) {
        System.out.print(matrix[i][j] + " ");
    }
    System.out.println();
}

不规则二维数组(每行长度可以不同):

java
int[][] jagged = {
    {1, 2},
    {3, 4, 5},
    {6}
};
System.out.println(jagged[0].length); // 2
System.out.println(jagged[1].length); // 3

6. 常见坑

java
// 坑1:数组越界(ArrayIndexOutOfBoundsException)
int[] arr = {1, 2, 3};
System.out.println(arr[3]); // ❌ 索引从 0 开始,最大是 2

// 坑2:空指针(NullPointerException)
String[] names = new String[3];
System.out.println(names[0].length()); // ❌ names[0] 是 null,不能调方法

// 坑3:length 是属性不是方法
arr.length    // ✅ 正确
arr.length()  // ❌ 编译报错(String 用 length(),数组用 length)

记住:数组是 length(属性),Stringlength()(方法),初学常混淆,写代码时会踩。