首先說一下char類型:
char類型用來表示單個字元。要想弄清楚char類型,就必須瞭解Unicode編碼錶。
在設計Java時決定採用16位的Unicode字元集。能表示65536個字元。
十分遺憾,經過一段時間,不可避免的事情發生了。Unicode字元超過了65536個。
(主要原因是增加了大量的漢語、日語、韓語這樣的表意文字),也就是16位的
char類型已經不能滿足所有的Unicode字元的需要了。
代碼點(code point):是指與一個編碼錶中的某個字元對應的代碼值。
在Unicode標準中,代碼點採用十六進位書寫,並加上首碼U+,例如U+0041就是
字母A的代碼點。
Unicode的代碼點可以分成17個代碼層級(code plane).
第一個代碼層級成為 基本的多語言層級(basic multilingual plane),
代碼點從U+0000大U+FFFF,其中包含了經典的Unicode代碼。
其餘的16個附加層級代碼點從U+10000到U+10FFFF,其中包括了一些輔助字元
(supplementary character)。
UTF-16編碼採用不同長度的編碼錶示所有Unicode代碼點。在基本的多語言層級中,
每個字元用16位表示,通常被稱為代碼單元(code unit)。而輔助字元採用一對連續
的代碼單元進行編碼。
Java中得代碼點與代碼單元:
Java字串由char序列組成。字元資料類型是一個採用UTF-16編碼錶示Unicode代碼點
的代碼單元。
大多數的常用Unicode字元使用一個代碼單元就可以表示,
而輔助字元需要一對代碼單元表示。
length方法將返回採用UTF-16編碼錶示的給定字串所需要的代碼單元數量。
String greeting = "Hello";
int n = greeting.length(); //is 5
要想得到實際的長度,即代碼點數量,可以調用:
int cpCount = greeting.codePointCount(0, greeting.length());
摘自《Java核心技術》卷I