Java 数组必知:Arrays.toString 到底什么时候用
在日常 Java 开发中,我们经常会和数组打交道,尤其在日志打印、接口传参、批量操作时,总会遇到一个问题:为什么有时候直接用数组没问题,有时候必须套一层 Arrays.toString ()?
很多我们在写批量删除、批量查询接口时,代码类似这样:
@DeleteMapping
public Result delete(Integer[] ids) {
log.info("根据id批量删除员工:{}", Arrays.toString(ids));
empService.delete(ids);
return Result.success();
}
明明遍历数组时不用做任何转换,偏偏打印日志、拼接信息时必须用 Arrays.toString,为什么?到底什么时候使用字符串转换的方法?
一、先搞懂:为什么直接打印数组会 “乱码”?
Java 中的数组是引用类型,它继承自 Object,但没有重写 toString () 方法。
直接打印数组时,JVM 会调用 Object 默认的 toString:类型名@哈希码
比如 Integer [] 数组直接打印,会输出:
[Ljava.lang.Integer;@1234abcd
这串内容对我们调试毫无意义,我们想看的是数组里真实的元素,比如 [1,2,3]。
而 Arrays.toString () 的作用,就是把数组内容转换成人类可读的字符串,自动遍历、拼接、格式化,输出 [元素1, 元素2, 元素3] 这种格式。
二、When use Arrays.toString ()?
只要是把 “整个数组” 用来展示、打印、拼接字符串,就必须用 Arrays.toString ()。
必须使用的场景
- 日志打印数组内容(最常见)
log.info("批量删除ids:{}", Arrays.toString(ids));
- 控制台打印数组
String msg = "本次删除的id为:" + Arrays.toString(ids);
-
字符串拼接,要显示数组内容
String msg = "本次删除的id为:" + Arrays.toString(ids);
-
调试时查看数组元素
共同点:需要把数组展示给人看,而不是交给代码逻辑处理。
三、什么时候完全不需要用 Arrays.toString ()?
同样一句话: 只是把数组传给方法、遍历元素、判断长度,完全不用转换。
不需要使用的场景
-
遍历数组,处理单个元素
for (Integer id : ids) {
empMapper.deleteById(id);
}
-
直接把数组传给接收数组类型的方法
// 方法定义:void delete(Integer[] ids)
empService.delete(ids);
-
判断数组是否为空、获取长度
if (ids == null || ids.length == 0) {
return Result.error("id不能为空");
}
共同点:代码只认数组类型,不认字符串,直接传数组即可。
四、代码示例
@DeleteMapping
public Result delete(Integer[] ids) {
// 日志展示给人看 → 必须用 Arrays.toString
log.info("根据id批量删除员工:{}", Arrays.toString(ids));
// 传给service,要的是数组类型 → 直接传,不用
empService.delete(ids);
return Result.success();
}
日志:要内容 → 用 Arrays.toString
方法传参:要数组 → 不用
五、浅浅总结
-
数组直接打印 = 输出地址,无意义
-
Arrays.toString = 输出元素内容,用于展示、日志、调试
-
展示给人看 → 用
-
代码逻辑处理、传参、遍历 → 不用
如果数组里是自定义对象,比如
Emp[],直接用Arrays.toString打印的还是对象地址。 这时候需要我们在实体类中重写 toString () 方法,才能看到真实字段内容。
更多推荐



所有评论(0)