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中InputStream和Reader之间的转换(字符流和字节流怎么互相转换啊)