char是16位基本类型,String是不可变引用类型;char转String推荐String.valueOf(),String转char需先确保长度为1再用charAt();批量转换用new String(char[])或toCharArray();处理emoji等需用codePoint相关方法。

Java中字符(char)与字符串(String)的相互转换非常直接,核心在于理解两者本质:char是16位基本数据类型,表示单个Unicode字符;String是不可变的引用类型,本质是字符序列。
char转String的常用方式
最推荐、最高效的方式是使用String.valueOf(char),它专为基本类型设计,简洁且无多余对象创建。
-
推荐写法:
String s = String.valueOf('A'); -
也可用空字符串拼接:
String s = "" + 'A';(编译器会优化,但语义不如valueOf清晰) -
不建议用new String(char[]):
new String(new char[]{'A'})会额外创建数组和String对象,效率低且冗余
String转char的关键限制
字符串可能含0个、1个或多个字符,因此不能无条件“转成char”。只有当字符串长度为1时,才能安全获取其唯一字符。
-
安全取单字符:
char c = s.charAt(0);(需先判断s.length() == 1) -
转为字符数组再取:
char c = s.toCharArray()[0];(同样要求非空且长度为1,否则抛StringIndexOutOfBoundsException或ArrayIndexOutOfBoundsException) -
避免直接强转:Java不支持
(char)str这类语法,编译报错
批量字符与字符串互转场景
处理多个字符时,常涉及char[]与String的转换,这是实际开发高频操作。
立即学习“Java免费学习笔记(深入)”;
-
char数组转String:
String s = new String(charArray);或String s = String.valueOf(charArray); -
String转char数组:
char[] chars = s.toCharArray();(注意返回的是副本,修改不影响原字符串) -
截取部分字符转数组:
char[] sub = s.substring(1, 3).toCharArray();
Unicode与扩展字符注意事项
Java的char是UTF-16编码单位,一个emoji或某些汉字可能占两个char(即代理对)。此时charAt()或toCharArray()可能无法正确拆分语义字符。
- 需要按Unicode码点处理时,用
s.codePointAt(i)和s.offsetByCodePoints() - 遍历所有字符应使用
s.codePoints().forEach(...)或传统循环配合Character.isSurrogatePair()判断 - 简单场景下无需考虑,但处理国际化文本或emoji时必须留意










