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

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

UTF-16 的 16 指的就是最小为 16 位一个单元,也即两字节为一个单元,UTF-16 可以包含一个单元和两个单元,对应即是两个字节和四个字节。我们操作 UTF-16 时就是以它的一个单元为基本单位的。

String.length()

返回字符串的长度,这一长度等于字符串中的 Unicode 代码单元的数目。

/**
 * Returns the length of this string.
 * The length is equal to the number of <a href="Character.html#unicode">Unicode
 * code units</a> in the string.
 *
 * @return  the length of the sequence of characters represented by this
 *          object.
 */
public int length() {
    return value.length;
}

Untitled

结果为2,因为这个字符的Unicode值为“U+1D11E”,大于U+FFFF,所以需要四个字节进行编码,也就是两个代码单元。

那如何统计字符串长度,可以用 String.codePointCount()

codePointCount其实就是代码点数的意思,也就是一个字符就对应一个代码点数。