使用 Arrays.deepToString() (最推荐)
这是最简单、最直接的方法,专门用于处理多维数组或包含其他数组的数组,它会自动为你生成一个格式良好、易于阅读的字符串表示,包括嵌套的方括号。

特点:
- 简单快捷:一行代码搞定。
- 格式清晰:输出结果直观,适合调试和打印。
- 通用性强:可以处理任意维度的数组(三维、四维等)。
示例代码:
import java.util.Arrays;
public class PrintNestedArray {
public static void main(String[] args) {
// 定义一个二维数组(数组的数组)
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 使用 Arrays.deepToString() 输出
System.out.println("使用 deepToString() 输出:");
System.out.println(Arrays.deepToString(matrix));
}
}
输出结果:
使用 deepToString() 输出:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
使用嵌套的 for 循环 (最灵活)
如果你需要对每个元素进行更复杂的处理,或者希望自定义输出格式(换行、添加分隔符等),嵌套的 for 循环是最佳选择。

特点:
- 完全控制:可以访问并操作每一个单独的元素。
- 格式自定义:可以自由控制输出的样式。
- 代码稍多:需要手动编写循环逻辑。
示例代码:
public class PrintNestedArrayWithLoops {
public static void main(String[] args) {
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
System.out.println("使用嵌套 for 循环输出:");
// 外层循环遍历每一个一维数组(行)
for (int i = 0; i < matrix.length; i++) {
// 内层循环遍历一维数组中的每一个元素(列)
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " "); // 使用 print 不换行
}
System.out.println(); // 每行结束后换行
}
}
}
输出结果:
使用嵌套 for 循环输出:
1 2 3
4 5 6
7 8 9
使用 Arrays.toString() + 循环 (不推荐用于多维数组)
初学者可能会误以为 Arrays.toString() 可以用于多维数组,但实际上它不能正确处理嵌套数组,它只会调用嵌套数组的 toString() 方法,而这个方法返回的是内存地址(如 [I@1b6d3586),而不是数组的内容。

特点:
- 错误用法:对于多维数组,输出结果无意义。
- 仅适用于一维数组。
示例代码(演示错误用法):
import java.util.Arrays;
public class PrintNestedArrayIncorrect {
public static void main(String[] args) {
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
System.out.println("错误地使用 Arrays.toString():");
// 这只会输出外层数组的 "字符串表示",而不是内容
System.out.println(Arrays.toString(matrix));
}
}
错误的输出结果:
错误地使用 Arrays.toString():
[[I@1b6d3586, [I@4554617c, [I@1c20c682]
可以看到,这完全不是我们想要的结果,请记住:对于多维数组,永远使用 Arrays.deepToString()。
总结与对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
Arrays.deepToString() |
简单、快速、格式清晰 | 输出格式固定,无法自定义 | 调试、快速打印、绝大多数日常使用场景 |
嵌套 for 循环 |
灵活、可自定义格式、可操作元素 | 代码较多,需要手动管理循环 | 需要对每个元素进行特殊处理,或需要特定输出格式时 |
Arrays.toString() |
- | 对多维数组无效,输出无意义 | 仅用于一维数组的打印 |
进阶:处理不规则数组(锯齿数组)
数组的每个子数组长度可能不同(即“锯齿数组”),上述方法依然适用,但在使用 for 循环时,你需要确保使用 matrix[i].length 来获取每一行的长度。
示例代码:
import java.util.Arrays;
public class printJaggedArray {
public static void main(String[] args) {
// 定义一个不规则的二维数组
int[][] jaggedArray = {
{1, 2, 3, 4},
{5, 6},
{7, 8, 9}
};
System.out.println("使用 deepToString() 输出不规则数组:");
System.out.println(Arrays.deepToString(jaggedArray));
System.out.println("\n使用嵌套 for 循环输出不规则数组:");
for (int i = 0; i < jaggedArray.length; i++) {
// 关键:使用 jaggedArray[i].length 获取当前行的长度
for (int j = 0; j < jaggedArray[i].length; j++) {
System.out.print(jaggedArray[i][j] + " ");
}
System.out.println();
}
}
}
输出结果:
使用 deepToString() 输出不规则数组:
[[1, 2, 3, 4], [5, 6], [7, 8, 9]]
使用嵌套 for 循环输出不规则数组:
1 2 3 4
5 6
7 8 9
最终建议
- 如果你只是想快速查看数组的内容,用于调试或日志输出,请毫不犹豫地使用
Arrays.deepToString(),这是最标准、最安全的方法。 - 如果你需要控制输出的每一个细节(比如美化表格、在特定条件下打印等),或者需要对数组元素进行计算,那么请使用嵌套的
for循环。
