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