Java語言內部存儲採用的是Unicode編碼,Unicode編碼中的每個字符佔兩個字節,中文也是佔兩個字節,所以,Java中的字符可以存儲一箇中文漢字。
1、而在不同的編碼方式中,中文所佔的字節數是不同的:
① ASCII碼中,一個英文字母(不分大小寫)佔一個字節的空間,一箇中文漢字佔兩個字節的空間。一個二進制數字序列,在計算機中作爲一個數字單元,一般爲8位二進制數,換算爲十進制。最小值0,最大值255。
② UTF-8編碼中,一個英文字符等於一個字節,一箇中文(含繁體)等於三個字節。
③ Unicode編碼中,一個英文等於兩個字節,一箇中文(含繁體)等於兩個字節。
符號:英文標點佔一個字節,中文標點佔兩個字節。舉例:英文句號“.”佔1個字節的大小,中文句號“。”佔2個字節的大小。
④ UTF-16編碼中,一個英文字母字符或一個漢字字符存儲都需要2個字節(Unicode擴展區的一些漢字存儲需要4個字節)。
⑤ UTF-32編碼中,世界上任何字符的存儲都需要4個字節。
2、解釋爲什麼Java的char類型只佔用兩個字節,採用utf-8編碼時,爲什麼可以存儲漢字?
Unicode是一種字符集(charset),用兩個字節就能囊括世界上多有的文字集合。
UTF-8是一種編碼方式(encoding),是Unicode的一種表現方式。
在Java文件中如果聲明瞭char c = '中';
,編譯後生成的class文件會把中
轉化成Unicode的一種表現方式。
Java char在內存中只會使用Unicode編碼,所有其他編碼只可能是在轉換成byte[]之後才能具體體現。
理解字符集和字符編碼的區別,有助於題主理解這些問題