You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中char字节数疑问:String.getBytes()结果为何与预期不符?

问题核心误区:混淆内部存储编码与字节转换编码

你混淆了两个完全不同的概念:Java中char的内部存储编码规则,和getBytes()方法进行字符编码转换时的字节数逻辑。

1. Java中char的内部存储:UTF-16编码

Java的char类型确实占用2字节,因为JVM内部用UTF-16编码存储字符。对于'a'这类ASCII范围内的字符,它们的UTF-16编码是两个字节(比如'a'对应编码值U+0061,UTF-16存储为0x00 0x61),这部分你的理解是正确的。

2. getBytes()方法的本质:编码转换而非直接拷贝

String.getBytes()不是直接把内部char[]的字节原样拷贝出来,而是会将字符串按照平台默认字符编码(通常是UTF-8)转换成字节数组:

  • UTF-8编码对ASCII字符采用单字节表示,所以'a'转成UTF-8字节数组后长度为1。
  • 如果强制指定UTF-16编码转换,比如调用test.getBytes(StandardCharsets.UTF_16BE),得到的字节数组长度就是2,和char的内部存储字节数一致。

3. 自定义charToByte方法的逻辑

你写的charToByte方法应该是直接通过位操作读取了char类型的两个原始存储字节(拆分高8位和低8位),这相当于直接提取char的内部存储内容,所以结果长度是2。这和getBytes()的编码转换行为完全不是一回事。

内容的提问来源于stack exchange,提问作者周嘉晔

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 17:10:19