getBytes()
和 toCharArray()
的主要区别在于它们的转换方式和结果类型:
getBytes()
:将字符串转换为 字节数组(byte[]),通常用于字符编码转换。toCharArray()
:将字符串转换为 字符数组(char[]),直接拆分字符串中的每个字符。
区别演示
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
public class StringConversionDemo {
public static void main(String[] args) {
String str = "Hello 你好";
// 1. 使用 getBytes() 将字符串转换为字节数组
byte[] byteArray = str.getBytes(StandardCharsets.UTF_8);
System.out.println("byte[] (UTF-8 编码): " + Arrays.toString(byteArray));
System.out.println("byte[] 还原字符串: " + new String(byteArray, StandardCharsets.UTF_8));
// 2. 使用 toCharArray() 将字符串转换为字符数组
char[] charArray = str.toCharArray();
System.out.println("char[]: " + Arrays.toString(charArray));
// 3. 手动遍历字符数组
System.out.print("char[] 遍历: ");
for (char c : charArray) {
System.out.print("'" + c + "' ");
}
}
}
输出结果
byte[] (UTF-8 编码): [72, 101, 108, 108, 111, 32, -28, -67, -96, -27, -91, -67]
byte[] 还原字符串: Hello 你好
char[]: [H, e, l, l, o, , 你, 好]
char[] 遍历: 'H' 'e' 'l' 'l' 'o' ' ' '你' '好'
区别分析
方法 | 结果类型 | 适用场景 | 说明 |
---|---|---|---|
getBytes() | byte[] | 用于编码转换,存储到二进制文件或网络传输 | 结果受字符编码影响,可能导致不同的字节表示 |
toCharArray() | char[] | 直接操作字符,如遍历、修改 | 结果与字符编码无关,直接拆分成字符 |
关键点
-
getBytes()
依赖字符编码:"你好"
在 UTF-8 下转换成 多个字节(3 个字节一个汉字)。- 如果使用 GBK 编码,每个汉字是 2 个字节。
- 常用于 IO、网络传输等场景。
-
toCharArray()
直接拆分字符:- 不涉及编码,每个
char
直接对应原始字符。 - 适用于逐个字符处理(如遍历、修改)。
- 不涉及编码,每个
什么时候用 getBytes()
,什么时候用 toCharArray()
?
-
getBytes()
:- 需要存储、传输、加密时(因为二进制数据更紧凑)。
- 需要不同编码格式转换时,如
new String(byteArray, "GBK")
。
-
toCharArray()
:- 需要逐个字符操作时,如修改某个字符(但
String
本身不可变)。 - 需要遍历和处理单个字符,不涉及编码转换。
- 需要逐个字符操作时,如修改某个字符(但