字符串与字符、字节数组

这页整理 Stringchar[]byte[] 之间的转换。

String 与 char[]

String 转 char[]

String s = "hello";
char[] chars = s.toCharArray();

char[] 转 String

char[] chars = {'h', 'e', 'l', 'l', 'o'};
String s = new String(chars);

String 与 byte[]

String 转 byte[]

String s = "hello";
byte[] bytes = s.getBytes();

建议指定编码:

byte[] bytes = s.getBytes(StandardCharsets.UTF_8);

byte[] 转 String

String s = new String(bytes, StandardCharsets.UTF_8);

使用 StandardCharsets.UTF_8 需要导入:

import java.nio.charset.StandardCharsets;

char 和 byte 的区别

类型含义常见用途
char字符处理字符内容
byte字节文件、网络、编码后的数据

字符串本质上是字符序列;保存到文件或网络传输时,需要通过编码变成字节序列。

常见问题

为什么会乱码

乱码通常是编码和解码不一致:

byte[] bytes = s.getBytes(StandardCharsets.UTF_8);
String wrong = new String(bytes, StandardCharsets.ISO_8859_1);

写入和读取时应尽量使用同一种编码,比如 UTF-8。

String 是否可变

String 不可变。修改字符串时,通常会生成新的字符串对象。

如果需要频繁拼接,考虑使用 StringBuilder

StringBuilder sb = new StringBuilder();
sb.append("hello");
sb.append(" world");
String result = sb.toString();

相关:String类常用实用类