arrays.tostring()对char[]不返回纯文本字符串,而是输出带方括号和逗号分隔的调试格式(如"[h, e, l, l, o]");需用new string(chars)、string.valueof(chars)或string.copyvalueof(chars)获取真正字符串。

Arrays.toString() 对字符数组(char[])的处理,和对其他引用类型数组(如 String[])或基本类型数组(如 int[])的处理逻辑一致,但输出格式容易引发误解——它**不会返回你期望的纯文本字符串**,而是返回带方括号和单引号的“元素列表”形式。
字符数组调用 Arrays.toString() 的真实输出
例如:
char[] chars = {'h', 'e', 'l', 'l', 'o'};
System.out.println(Arrays.toString(chars));
输出结果是:
[h, e, l, l, o]
注意:这不是字符串 "hello",而是由方括号包裹、逗号+空格分隔、每个字符不加引号(但底层按 Character 打印)的可读表示。这本质上是调试用途的“数组快照”,不是语义上的字符串内容。
为什么不能直接用 Arrays.toString() 得到 "hello"?
因为该方法的设计目标是**统一呈现任意数组结构**,而非做语义转换。它把 char[] 当作“对象数组”处理(每个 char 被自动装箱为 Character),所以输出格式与 String[] 一致,而非调用 new String(charArray) 那样的构造逻辑。
- 它不省略空格、不合并字符、不支持自定义分隔符
- 输出含方括号和逗号,无法直接用于 UI 显示或协议传输
- 若需纯文本,必须另选方法,而非依赖
Arrays.toString()
字符数组转真正字符串的推荐方式
要获得不含符号、可直接使用的字符串,应使用以下任一方式:
-
String 构造函数:
new String(chars)—— 最直观,性能好,适用于大多数场景 - String.valueOf(chars) —— 语义更清晰,内部其实也调用相同构造器,推荐用于强调“值转换”意图
-
String.copyValueOf(chars) —— 功能同
valueOf,但命名更侧重底层字符数组复用(无新数组拷贝)
三者在功能上等价,日常开发中 String.valueOf(chars) 是较平衡的选择。
误用 Arrays.toString() 的典型陷阱
常见错误写法:
// ❌ 错误:以为能拿到 "abc",实际得到 "[a, b, c]"
char[] data = {'a','b','c'};
String s = Arrays.toString(data); // s == "[a, b, c]"
后续若将 s 传给 JSON 序列化、日志埋点或前端渲染,会暴露格式噪音,甚至导致解析失败。
正确做法:
// ✅ 正确:获得干净字符串
String s = String.valueOf(data); // s == "abc"











