一维数组:声明、初始化、内存与 Arrays 工具
更新时间:2026-09-20。数组是 Java 里最基础的定长容器,理解它的「堆上连续空间 + length 不可变」是理解 ArrayList 扩容、字符串底层的前提。基本类型值与引用的区别见基本类型与包装类。
一、两种初始化
java
int[] a = new int[3]; // 动态初始化:先开长度,元素取默认值 0
a[0] = 10;
int[] b = {1, 2, 3}; // 静态初始化:声明时一次性给值(不能拆开赋值)
int[] c = new int[]{1, 2, 3}; // 完整静态写法,可用在方法传参/返回
String[] names = new String[2]; // 引用类型数组,默认值是 null| 要点 | 说明 |
|---|---|
| 长度 | a.length 是属性(无括号),创建后不可变 |
| 默认值 | 整型 0、浮点 0.0、boolean false、char '\u0000'、引用 null |
| 下标 | 从 0 到 length-1,越界抛 ArrayIndexOutOfBoundsException |
| 内存 | 数组对象在堆上,连续存放;变量本身只是引用 |
二、内存模型
bash
栈:arr ──► 堆:[ 10 | 0 | 0 ] length=3
下标 0 1 2把数组变量赋给另一个变量,只是复制引用,两个名字指向同一块堆内存:
java
int[] x = {1, 2};
int[] y = x; // y 和 x 指向同一数组
y[0] = 99;
System.out.println(x[0]); // 99,改 y 就是改 x方法参数传递同样遵循 Java 只有值传递:传的是引用的副本,所以方法内 arr[i]=... 会影响外部,但 arr = newArray 不会。
三、遍历、查找与排序
java
int[] a = {5, 2, 8, 1};
// 1) 下标遍历(需要索引时用)
for (int i = 0; i < a.length; i++) System.out.println(a[i]);
// 2) 增强 for(只读遍历时更简洁,拿不到下标)
for (int v : a) System.out.println(v);
// 3) 手写冒泡排序:相邻比较,每轮把最大的「冒泡」到末尾
for (int i = 0; i < a.length - 1; i++) {
for (int j = 0; j < a.length - 1 - i; j++) {
if (a[j] > a[j + 1]) { int t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; }
}
}四、java.util.Arrays 工具类
| 方法 | 作用 |
|---|---|
Arrays.toString(a) | 打印成 [1, 2, 8],别再直接 println(a)(输出地址哈希) |
Arrays.sort(a) | 排序(基本类型用双轴快排,对象用 TimSort) |
Arrays.binarySearch(a,key) | 必须先排序,返回下标,找不到返回负数 |
Arrays.copyOf(a,n) | 复制并可改长度,底层常是 System.arraycopy |
Arrays.fill(a,v) | 全部填充同一个值 |
Arrays.asList(1,2,3) | 转 List,但返回定长视图,add/remove 抛异常 |

坑
- 直接打印数组:
System.out.println(a)输出[I@1b6d3586这种「类型@哈希」,要用Arrays.toString。 - 定长视图当可变 List:
Arrays.asList返回的是基于原数组的定长 List,调add抛UnsupportedOperationException;要可变就new ArrayList<>(Arrays.asList(...))。 - 未排序就 binarySearch:结果未定义,查得到也可能返回错下标。
- 多维数组其实是数组的数组:
int[][] m的每一行长度可以不同(不规则数组),别假设是矩阵。
总结
一维数组是堆上一块定长连续空间,length 创建后不变、越界即抛异常,引用类型元素默认 null;数组变量之间赋值或传参只是共享同一块堆内存;遍历按需用下标或增强 for,排序/打印/复制/查找优先用 Arrays 工具而非手写,但要记住 binarySearch 前先 sort、asList 返回定长视图——真正需要动态增删时应升级到 ArrayList(见集合家族)。 集合选型见 ArrayList 与 LinkedList。