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

为何单个字符‘𐍉’对应的String.length()返回值为2?

为什么Java中字符‘𐍉’的String.length()返回2?

这是由Java字符串的底层编码逻辑和length()方法的定义共同决定的:

  • Java的String内部采用UTF-16编码存储字符。Unicode字符分为两个范围:基本多语言平面(BMP,编码范围U+0000到U+FFFF)和补充平面(编码范围U+10000到U+10FFFF)。字符‘𐍉’的Unicode编码是U+10349,属于补充平面字符,超出了BMP的范围。
  • 按照UTF-16的编码规则,BMP内的字符用1个16位的代码单元(Code Unit)表示,而补充平面的字符需要用两个16位代码单元组成的代理对(高代理项+低代理项)来表示。
  • String.length()方法的返回值是字符串中UTF-16代码单元的数量,而非实际Unicode字符(Code Point)的数量。‘𐍉’作为补充平面字符,占用2个UTF-16代码单元,因此length()返回2。

如果要获取实际的Unicode字符数量,可以使用codePointCount()方法:

int actualCharCount = chars.codePointCount(0, chars.length());
// actualCharCount 的值为1

内容的提问来源于stack exchange,提问作者newman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:20:39