Appearance
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/byte | 0 |
float/double | 0.0 |
boolean | false |
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最常用的是
sort、toString、copyOf,记住这三个就够。
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); // 36. 常见坑
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(属性),String是length()(方法),初学常混淆,写代码时会踩。