核心概念
String: 是一个对象,代表一个字符序列,它是不可变的(immutable),一旦创建就不能被修改。char: 是一个基本数据类型(primitive type),代表一个单一的字符。
String 转 char
从 String 转换到 char 通常有以下几种情况:

a) 获取字符串中的单个字符
这是最常见的操作。String 类提供了 charAt(int index) 方法,可以获取指定索引位置上的 char。
注意: Java 字符串的索引从 0 开始。
示例代码:
public class StringToCharExample {
public static void main(String[] args) {
String str = "Hello";
// 获取索引为 1 的字符 (第二个字符)
char ch = str.charAt(1);
System.out.println("索引为 1 的字符是: " + ch); // 输出: e
// 获取第一个字符
char firstChar = str.charAt(0);
System.out.println("第一个字符是: " + firstChar); // 输出: H
// 获取最后一个字符
char lastChar = str.charAt(str.length() - 1);
System.out.println("最后一个字符是: " + lastChar); // 输出: o
}
}
重要:边界检查
如果传入的 index 超出范围(小于 0 或大于等于字符串长度),charAt() 方法会抛出 StringIndexOutOfBoundsException 异常。

String str = "Hi";
try {
char ch = str.charAt(2); // 索引 2 超出范围 (最大为 1)
System.out.println(ch);
} catch (StringIndexOutOfBoundsException e) {
System.out.println("错误:索引超出范围!"); // 这行会被执行
}
b) 将整个字符串转换为 char 数组
如果你想将字符串中的所有字符都提取出来,可以使用 toCharArray() 方法,它会返回一个包含字符串所有字符的 char 数组。
示例代码:
public class StringToCharArrayExample {
public static void main(String[] args) {
String str = "Java";
// 将字符串转换为 char 数组
char[] charArray = str.toCharArray();
// 打印数组
System.out.println("转换后的 char 数组: " + java.util.Arrays.toString(charArray));
// 输出: 转换后的 char 数组: [J, a, v, a]
// 遍历数组
System.out.print("遍历字符: ");
for (char c : charArray) {
System.out.print(c + " "); // 输出: J a v a
}
}
}
char 转 String
从 char 转换到 String 也有几种常用方法。
a) 使用 String 的构造函数
可以直接使用 String 类的构造函数,它接受一个 char 数组作为参数,如果你只有一个 char,可以创建一个只包含该字符的数组。

示例代码:
public class CharToStringExample1 {
public static void main(String[] args) {
char ch = 'A';
// 方法1: 创建一个单元素数组,然后用 String 构造函数
String str1 = new char[]{ch};
System.out.println("使用构造函数转换: " + str1); // 输出: A
}
}
注意: new String(ch) 是错误的,因为 String 的构造函数不接受单个 char 作为参数。
b) 使用 String.valueOf(char) 方法
这是最推荐、最简洁、最高效的方法。String.valueOf() 是一个静态重载方法,可以接受各种参数(包括 char)并将其转换为 String。
示例代码:
public class CharToStringExample2 {
public static void main(String[] args) {
char ch = 'B';
// 方法2: 使用 String.valueOf() (推荐)
String str2 = String.valueOf(ch);
System.out.println("使用 valueOf() 转换: " + str2); // 输出: B
}
}
c) 使用字符的拼接
一个非常巧妙且简单的方法是,将 char 与一个空字符串 进行拼接,因为任何类型与字符串拼接的结果都是字符串,Java 会自动将 char 转换为 String。
示例代码:
public class CharToStringExample3 {
public static void main(String[] args) {
char ch = 'C';
// 方法3: 使用空字符串拼接 (巧妙且常用)
String str3 = ch + "";
System.out.println("使用拼接转换: " + str3); // 输出: C
}
}
char 数组 转 String
如果你有一个 char 数组,想把它变成一个 String,有两种主要方式。
a) 使用 String 构造函数
这是最直接的方式。
示例代码:
public class CharArrayToStringExample1 {
public static void main(String[] args) {
char[] chars = {'J', 'a', 'v', 'a'};
// 方法1: 使用 String 构造函数
String str1 = new String(chars);
System.out.println("使用构造函数转换: " + str1); // 输出: Java
}
}
b) 使用 String.valueOf(char[]) 方法
同样,String.valueOf() 方法也提供了重载版本来处理 char 数组。
示例代码:
public class CharArrayToStringExample2 {
public static void main(String[] args) {
char[] chars = {'P', 'y', 't', 'h', 'o', 'n'};
// 方法2: 使用 String.valueOf()
String str2 = String.valueOf(chars);
System.out.println("使用 valueOf() 转换: " + str2); // 输出: Python
}
}
总结与最佳实践
| 转换方向 | 推荐方法 | 示例 | 备注 |
|---|---|---|---|
String -> char |
charAt(index) |
char c = "abc".charAt(0); |
获取单个字符,注意索引越界。 |
String -> char[] |
toCharArray() |
char[] arr = "abc".toCharArray(); |
将整个字符串转为字符数组。 |
char -> String |
String.valueOf() |
String s = String.valueOf('A'); |
最推荐,清晰、高效。 |
char -> String |
字符串拼接 | String s = 'A' + ""; |
非常简洁,但底层原理是创建一个 StringBuilder。 |
char[] -> String |
String 构造函数 |
String s = new char[]{'A', 'B'}; |
最直接的方式。 |
char[] -> String |
String.valueOf() |
String s = String.valueOf(new char[]{'A', 'B'}); |
同样是很好的选择。 |
核心要点:
String不可变:所有对String的修改操作(如replace,toUpperCase)实际上都是返回一个新的String对象,原对象本身不变。charAt要小心:在使用charAt时,务必确保索引在有效范围内,否则会抛出异常。valueOf是万能钥匙:对于基本数据类型和数组转String,String.valueOf()通常是首选,因为它代码清晰且性能良好。
