arrays.tostring()比手动拼接更可靠,因其自动处理null元素、支持基本类型专用重载、避免误调用tostring()、不递归展开多维数组且格式标准化,而手动拼接易出现边界错误、空指针异常和分隔符错位等问题。

Java 中打印数组内容时,直接用 System.out.println(array) 只会输出类似 [Ljava.lang.String;@1b6d3586 的哈希码,毫无可读性。而 Arrays.toString() 是标准库提供的轻量级解决方案,无需额外依赖,一行代码就能把数组转成清晰、格式统一的字符串表示,显著提升调试效率和代码可维护性。
为什么 Arrays.toString 比手动拼接更可靠
手动遍历数组拼接字符串(如用 for 循环 + StringBuilder)容易出错:边界判断遗漏、空指针未处理、分隔符位置错误、嵌套数组无法识别等。而 Arrays.toString() 内部已针对 null 元素、基本类型、引用类型做了健壮处理,且对一维数组格式标准化(如 [a, b, c]),符合 Java 开发者普遍预期。
- 自动处理 null 元素,显示为
null而非抛出异常 - 对 char[]、int[] 等基本类型数组有专用重载方法,避免装箱开销和 toString() 误调用
- 不递归展开多维数组(如 int[][]),避免无限递归或混乱输出;如需展开,应使用
Arrays.deepToString()
常见用法与典型场景
日常开发中,Arrays.toString() 最常用于日志输出、单元测试断言、调试信息打印。它接受任意一维数组(包括基本类型和对象),返回格式统一的字符串。
-
字符串数组:
System.out.println(Arrays.toString(new String[]{"foo", "bar"}));→[foo, bar] -
整型数组:
System.out.println(Arrays.toString(new int[]{1, 2, 3}));→[1, 2, 3] -
含 null 的对象数组:
System.out.println(Arrays.toString(new Integer[]{1, null, 3}));→[1, null, 3] -
配合日志框架:
log.debug("Input params: {}", Arrays.toString(params));
注意多维数组的正确写法
对二维及以上数组,Arrays.toString() 仅对最外层数组生效,内部元素仍显示为地址(如 [[I@7a81197d, [I@5ca8de0b])。此时必须改用 Arrays.deepToString() 才能完整展开。
- 错误示例:
Arrays.toString(new int[][]{{1,2}, {3,4}})→ 输出不可读 - 正确写法:
Arrays.deepToString(new int[][]{{1,2}, {3,4}})→[[1, 2], [3, 4]] - 注意:deepToString 对 null 行/列也安全,不会 NPE
替代方案对比与取舍建议
虽然 Lombok 的 @ToString、Apache Commons Lang 的 ArrayUtils.toString() 或自定义工具类也能实现类似功能,但 Arrays.toString() 的优势在于零依赖、JDK 原生、语义明确、性能无损耗。除非项目强制统一工具链或需定制格式(如不带方括号、换成分号分隔),否则无需引入额外方案。
- JDK 1.5+ 全版本可用,无需考虑兼容性
- 方法是 static 且 final,线程安全,可放心在高并发日志中调用
- IDE(如 IntelliJ)在调试视图中也默认调用该方法展示数组,保持内外一致
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











