Scala Char占用多少字节?为何部分字符可容纳至少三个字节及相关文档查询
Scala Char类型的字节占用与扩展字符支持解析
1. Char类型的字节占用
Scala的Char类型完全复用了JVM的char类型,所以它的大小是2字节(16位)。毕竟Scala运行在JVM之上,基本类型的底层实现和Java保持一致,这点不用怀疑。
2. 为什么单个Char能容纳你例子里的字符?
你提到的䕖看起来像是需要3字节存储,但这里其实是把Unicode码点的存储和UTF-8编码的字节数搞混了:
- 这个字符的Unicode码点是
U+4556,属于Unicode的基本多语言平面(BMP)——也就是码点范围在U+0000到U+FFFF之间的字符,刚好能被16位的Char完全容纳(因为16位无符号整数的范围就是0到65535,对应U+0000到U+FFFF)。 - 而它的UTF-8编码确实是3字节(
E4 95 96),但UTF-8是一种可变长度的编码方式,用来把Unicode码点转换成字节流存储或传输,这和Char在JVM内存里的存储大小是两回事。 - 如果是超出BMP的字符(比如一些emoji,码点在
U+10000及以上),Scala会用两个Char组成的代理对来表示,这时候一个完整的字符需要占用4字节内存,但单个Char依然是2字节。
3. 相关官方文档位置
你可以直接查看Scala官方的API文档里的scala.Char类说明,里面明确标注了它对应Java的char类型,是16位的Unicode字符。另外,因为Scala遵循JVM规范,JVM官方关于char类型的定义也完全适用于Scala的Char,不过Scala自己的API文档已经足够清晰覆盖这部分内容了。
内容的提问来源于stack exchange,提问作者gurghet
相关产品推荐
相关产品推荐

