数组是 Java 里最基础的数据结构:一块连续内存装着一组相同类型的值,通过下标访问,速度极快。实际项目里虽然更多用 List,但数组是绕不开的基础。
声明与初始化
Java 数组有三种常见写法:先声明后赋值、声明时直接给元素、用 new 指定长度。
// 方式一:静态初始化,直接给出所有元素
int[] scores = {90, 85, 77};
// 方式二:动态初始化,指定长度,元素是默认值
int[] arr = new int[3];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
System.out.println(scores[0]); // 90
System.out.println(arr.length); // 3
注意:new int[3] 创建后元素是默认值,int 是 0,boolean 是 false,对象类型(比如 String)是 null。
访问元素与越界问题
下标从 0 开始,最大到 length - 1。越界访问不会自动容错,会直接抛异常。
int[] scores = {90, 85, 77};
System.out.println(scores[1]); // 85
scores[1] = 88; // 修改元素
System.out.println(scores[1]); // 88
// System.out.println(scores[3]); // ArrayIndexOutOfBoundsException
length 是数组的属性(不带括号),别和字符串的 length() 方法、集合的 size() 方法搞混。
遍历:for 与 for-each
普通 for 循环能拿到下标,适合需要改元素或知道位置的场景;for-each 更简洁,只读元素时优先用它。
String[] langs = {"Java", "Python", "Go"};
// 普通 for:有下标
for (int i = 0; i < langs.length; i++) {
System.out.println(i + ": " + langs[i]);
// 0: Java
// 1: Python
// 2: Go
}
// for-each:只要元素本身
for (String lang : langs) {
System.out.println("hello " + lang);
}
一个小陷阱:for-each 里改循环变量不会影响数组本身,需要修改元素时请用普通 for。
二维数组
二维数组就是「数组的数组」,最常见的是表格状的矩形数组。
int[][] matrix = {
{1, 2, 3},
{4, 5, 6}
};
System.out.println(matrix[1][2]); // 6,第 2 行第 3 列
System.out.println(matrix.length); // 2,行数
System.out.println(matrix[0].length); // 3,列数
遍历二维数组要嵌套 for:外层循环走行、内层循环走列。
Arrays 工具类:打印、排序与复制
java.util.Arrays 是操作数组的官方工具箱,最常用的三个方法是 toString()、sort() 和 copyOf()。
import java.util.Arrays;
int[] nums = {5, 2, 8, 1};
// 直接打印数组名只会得到内存地址,要用 toString()
System.out.println(nums); // 类似 [I@1b6d3586
System.out.println(Arrays.toString(nums)); // [5, 2, 8, 1]
// 排序(直接修改原数组)
Arrays.sort(nums);
System.out.println(Arrays.toString(nums)); // [1, 2, 5, 8]
// 复制:新数组长度为 6,多出的位置补 0
int[] bigger = Arrays.copyOf(nums, 6);
System.out.println(Arrays.toString(bigger)); // [1, 2, 5, 8, 0, 0]
直接打印数组名得到的 [I@1b6d3586 是内存地址不是内容,想看内容永远用 Arrays.toString()。
小结
- 数组声明用
int[] arr = {...}静态初始化,或new int[n]动态初始化(元素为默认值) - 下标从 0 开始,越界抛
ArrayIndexOutOfBoundsException;长度用arr.length - 只读遍历用 for-each,需要下标或修改元素用普通 for
- 二维数组是数组的数组,
matrix.length是行数、matrix[0].length是列数 - 打印数组内容用
Arrays.toString(),排序用Arrays.sort(),复制用Arrays.copyOf()
数组练熟之后,下一步可以对比着学 List,下一篇展开讲。




评论 0
还没有评论,来抢沙发吧~ 🛋