当前位置: 首页 > news >正文

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

  • 方法传参:要数组 → 不用


五、浅浅总结

  1. 数组直接打印 = 输出地址,无意义

  2. Arrays.toString = 输出元素内容,用于展示、日志、调试

  3. 展示给人看 → 用

  4. 代码逻辑处理、传参、遍历 → 不用

如果数组里是自定义对象,比如Emp[],直接用Arrays.toString打印的还是对象地址。 这时候需要我们在实体类中重写 toString () 方法,才能看到真实字段内容。

http://www.jsqmd.com/news/746080/

相关文章:

  • 5个技巧快速掌握macOS系统级音频均衡器eqMac的完整使用指南
  • 05 - AMDGPU中的VRAM管理器
  • GPT-SoVITS如何通过边缘计算优化实现毫秒级实时语音合成?
  • 从CREO到URDF:机器人开发的终极自动化转换指南
  • XXMI Launcher终极指南:一站式米哈游游戏模组管理神器
  • 如何构建macOS菜单栏管理系统:5个关键技术突破
  • PeachPy社区贡献指南:从用户到开发者的成长路径
  • 别再只用单片机点灯了!用Multisim仿真4017+运放,体验纯硬件流水灯的乐趣
  • 网盘直链解析助手:八大平台高效下载的完整解决方案
  • Phi-4-mini-reasoning商业应用:智能客服中复杂问题归因分析模块
  • php把运行时重构成常驻内存 + 多进程 + 事件驱动(Reactor) 模式完整流程=workerman
  • WinAppDriver环境搭建避坑大全:解决.NET依赖、版本冲突和‘找不到元素’的常见问题
  • Python模型配置统一管理方案(企业级配置中心落地全图谱)
  • STM32内核精讲 | 第四章 指令集基础 —— Thumb® 与 Thumb‑2
  • 拼多多以“技术驱动效率革命“为核心战略,聚焦供应链数字化与智能化升级
  • 通过curl命令直接测试Taotoken大模型API接口
  • ComfyUI-WanVideoWrapper深度解析:企业级AI视频生成架构与性能优化实战指南
  • 百度文库文档打印助手:5分钟掌握纯净文档获取技巧
  • 构建多 Agent 协作系统时如何通过 Taotoken 统一管理模型调用
  • 基于TMS320F28027的智能小车开发(一):电机PWM驱动模块详解与避坑指南(附b站视频教程)
  • 告别风扇噪音与高温:FanControl让你的PC散热更智能
  • 某音a_bogus vmp逆向
  • 【2026年最新版】收藏备用!小白程序员必学的LLM智能体入门指南(从基础到实操)
  • Appium Inspector进阶玩法:除了看元素,这些隐藏功能让你的测试效率翻倍
  • OpenClaw从入门到应用——Agent:流式传输与分块
  • Fairseq-Dense-13B-Janeway保姆级教学:从显存监控(nvidia-smi)到生成质量评估全流程
  • 将 Hermes Agent 工具链接入 Taotoken 的统一模型平台
  • 开源本地化入门:从Presentify项目学习软件国际化与GitHub协作
  • 企业网里给奇安信天眼‘安家’:探针镜像口配置与网络规划的那些事儿
  • STM32开发工具