Arrays.toString()是Java中将原始类型数组转字符串的最简方式,支持8种原始类型及对象数组,空数组安全但null会抛异常;嵌套数组需用deepToString();日志中应使用参数化形式避免提前拼接。

Arrays.toString() 是 Java 中最简单直接的原始类型数组转字符串方式,适合快速日志输出,无需额外依赖或手动拼接。
支持所有原始类型数组
该方法重载了全部 8 种原始类型数组(int[]、double[]、boolean[] 等)以及对象数组的版本,调用时自动匹配,不用转换包装类或 Stream:
int[] arr = {1, 2, 3}; System.out.println(Arrays.toString(arr)); // [1, 2, 3]boolean[] flags = {true, false, true}; logger.info("Flags: {}", Arrays.toString(flags)); // [true, false, true]- 即使空数组也安全:
double[] empty = {}; Arrays.toString(empty)→[]
嵌套数组需用 deepToString()
如果日志中要打印二维或更高维原始数组(如 int[][]),toString() 仅返回哈希码,应改用 Arrays.deepToString():
int[][] matrix = {{1,2}, {3,4}};logger.debug("Matrix: {}", Arrays.deepToString(matrix)); // [[1, 2], [3, 4]]- 它递归处理每一层,对原始类型子数组仍调用对应
toString(),结果可读性强
日志中避免临时字符串拼接开销
在 SLF4J 或 Log4j 等支持参数化日志的框架中,直接传入 Arrays.toString(arr) 作为参数即可,无需提前拼接:
- ✅ 推荐:
log.warn("Failed IDs: {}", Arrays.toString(failedIds));(仅当日志级别启用时才执行 toString) - ❌ 避免:
log.warn("Failed IDs: " + Arrays.toString(failedIds));(无论日志是否输出,都会构造字符串) - 对大数组也适用,但若数组极大(如百万级),需评估 toString 是否影响性能;此时可考虑截断或采样输出
注意 null 安全性
Arrays.toString(null) 会抛出 NullPointerException。日志前建议判空或用工具方法兜底:
- 简单处理:
Arrays.toString(arr == null ? new int[0] : arr) - 更清晰写法:
Optional.ofNullable(arr).map(Arrays::toString).orElse("null") - 或封装为工具方法:
safeToString(int[] a) { return a == null ? "null" : Arrays.toString(a); }










