java中字符的String.length()和字符代码单元的关系

Posted 好大的月亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中字符的String.length()和字符代码单元的关系相关的知识,希望对你有一定的参考价值。

先看源码定义

Java中 有内码和外码这一区分简单来说

内码:char或String在内存里使用的编码方式。
外码:除了内码都可以认为是“外码”。(包括class文件的编码)

java内码:unicode(utf-16)中使用的是utf-16.所以上面的那句话再进一步解释就是:返回字符串的长度,这一长度等于字符串中的UTF-16的代码单元的数目。

代码单元指一种转换格式(UTF)中最小的一个分隔,称为一个代码单元(Code Unit),因此,一种转换格式只会包含整数个单元。UTF-X中的数字 X就是各自代码单元的位数。比如UTF-16就是一个单元16bit,2个byte;

介绍完之后正题就来了
UTF-16编码一个字符对于U+0000-U+FFFF范围内的字符采用2字节进行编码,而对于字符的码点大于U+FFFF的字符采用四字节进行编码,前者是两字节也就是一个代码单元,后者一个字符是四字节也就是两个代码单元!

运行demo结果

以上是关于java中字符的String.length()和字符代码单元的关系的主要内容,如果未能解决你的问题,请参考以下文章

Java字符流和字节流对文件操作

JAVA中length()可以获得字符串和数组的长度对不对

Java中InputStream和Reader之间的转换(字符流和字节流怎么互相转换啊)

Java字符流和字节流对文件操作的区别

Java中求字符串String和数组Array的长度(length)

java中字符的String.length()和字符代码单元的关系