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

【Java】Java 打印字符数组的正确姿势

请添加图片描述


文章目录

    • 一、前言
    • 二、基础知识:`char[]` 是什么?
    • 三、打印 `char[]` 的不同方式
      • 1. 直接使用 `System.out.println(char[])`
      • 2. 使用 `Arrays.toString(char[])`
      • 3. 转换为字符串输出
      • 4. 使用 `String.valueOf(char[])`
      • 5. 使用循环逐个打印
    • 四、常见错误与陷阱
      • ❌ 1. 直接打印 `char[]` 的引用(错误示例)
      • ❌ 2. 打印其他类型数组时行为不同
      • ⚠️ 3. 字符编码问题


一、前言

在 Java 编程中,我们经常需要处理字符数组(char[])。

然而在 打印字符数组 时,常常会遇到让人疑惑的输出结果。

例如:

char[] chars = {'H', 'e', 'l', 'l', 'o'};
System.out.println(chars);

输出结果:

Hello

看起来没问题,但如果换成 int[]

int[] nums = {1, 2, 3};
System.out.println(nums);

输出结果却是:

[I@1b6d3586

这是为什么呢?


二、基础知识:char[] 是什么?

在 Java 中:

char[] array = {'J', 'a', 'v', 'a'};

char[] 是一个 字符类型的数组对象
每个元素是一个 Unicode 字符,占用 2 字节(16 位)


三、打印 char[] 的不同方式

1. 直接使用 System.out.println(char[])

char[] chars = {'J', 'a', 'v', 'a'};
System.out.println(chars);

输出:

Java

这是最直接也是最常用的方式。

原因解析:

System.out.println(char[]) 在底层调用了 PrintStream 类的重载方法:

public void println(char[] x) {synchronized (this) {print(x);newLine();}
}

print(char[] x) 的实现是:

public void print(char s[]) {write(s);
}

最终,它会直接把字符数组 当作字符串 输出(而不是调用 toString())。
因此可以直接显示内容 "Java"


2. 使用 Arrays.toString(char[])

import java.util.Arrays;public class Main {public static void main(String[] args) {char[] chars = {'H', 'e', 'l', 'l', 'o'};System.out.println(Arrays.toString(chars));}
}

输出:

[H, e, l, l, o]

✅ 适合调试场景。
Arrays.toString() 会以数组形式打印每个字符,并加上逗号和方括号。


3. 转换为字符串输出

char[] chars = {'N', 'i', 'H', 'a', 'o'};
String str = new String(chars);
System.out.println(str);

输出:

NiHao

✅ 推荐在需要将字符数组转换为字符串时使用。

这是 String 类的一个常用构造函数:

public String(char value[]) {this.value = Arrays.copyOf(value, value.length);
}

它会将字符数组内容拷贝到新的字符串对象中。


4. 使用 String.valueOf(char[])

char[] chars = {'a', 'b', 'c'};
System.out.println(String.valueOf(chars));

输出:

abc

✅ 功能与 new String(chars) 相同。
内部同样调用了 new String(value) 构造方法。

区别在于:

  • new String(chars) 创建新对象;
  • String.valueOf(chars) 在内部可能做额外的优化。

5. 使用循环逐个打印

char[] chars = {'J', 'a', 'v', 'a'};
for (char c : chars) {System.out.print(c);
}
System.out.println(); // 换行

输出:

Java

✅ 手动控制输出格式,适合自定义打印逻辑(例如加分隔符)。


四、常见错误与陷阱

❌ 1. 直接打印 char[] 的引用(错误示例)

Object obj = new char[]{'J', 'a', 'v', 'a'};
System.out.println(obj);

输出:

[C@5acf9800

原因:objObject 类型,而不是 char[]
println(Object x) 调用的是 x.toString(),而数组没有重写 toString()
因此输出的是内存地址形式(如 [C@哈希码)。

✅ 解决方案:

System.out.println(new String((char[]) obj));

❌ 2. 打印其他类型数组时行为不同

int[] arr = {1, 2, 3};
System.out.println(arr); // 输出 [I@1b6d3586

这是因为 只有 char[] 被特殊对待
其他数组必须使用 Arrays.toString() 或循环打印。


⚠️ 3. 字符编码问题

如果字符数组中包含中文或特殊符号:

char[] chars = {'你', '好', 'J', 'a', 'v', 'a'};
System.out.println(chars);

输出可能因编码而异。
在 UTF-8 编码下结果正常显示,但在非 Unicode 控制台上可能出现乱码。
✅ 解决方案:确保项目编码为 UTF-8。


参考用toCharArray()转换后直接打印Java toCharArray() 方法 | 菜鸟教程

http://www.dtcms.com/a/582218.html

相关文章:

  • 做两个阿里网站wordpress教程下载
  • Rust 练习册 :Minesweeper与二维数组处理
  • Flink CDC「Data Pipeline」定义与参数速查
  • 电子烟花:科技点亮夜空的艺术
  • Anatomy-guided Pathology Segmentation
  • 广州建设工程合同备案系统网站做一个网站需要多少费用
  • 内存区域划分——垃圾回收
  • 网站建设可行性分析网站开发需求分析用的图
  • Android 无侵入式数据采集:从手动埋点到字节码插桩的演进之路
  • 一致性哈希和普通哈希有什么区别
  • vue 三种类型的插槽
  • TCP的核心特性精讲(上篇)
  • 河源市企业网站seo价格商城网站策划书
  • Spark-3.5.7文档5 - Spark Streaming 编程指南
  • 北京网站关键词优化推荐徐州列表网
  • Spring 事务管理 Transaction rolled back because it has been marked as rollback-only
  • git不想被添加的文件加入到了列表中如何去掉
  • 网关开发笔记
  • 不备案怎么做淘宝客网站吗网站的视频怎么下载
  • 贵阳市住房和城乡建设部网站北京有几个区几个县
  • 【笔记】修复 ComfyUI 启动 ImportError: cannot import name ‘cached_download‘ 错误
  • 长沙网站优化页面学校网站建设工作
  • 昆明企业做网站黎城网站建设
  • 在vue3+uniapp+vite中挂载全局属性方法
  • 地理信息科学 vs 测绘工程:专业区别与就业前景
  • ​​Linux环境下的C语言编程(十六)
  • 淘宝购物返利网站开发基层建设杂志网站
  • 某多多 Redis 面试相关知识点总结
  • 【STM32】知识点介绍三:哈希算法详解
  • Effective STL第8条: 切勿创建包含auto_ptr的容器对象