首 先,java中的一個char是2個字節。java采用unicode,2個字節來表示一個字符,這點與C語言中不同,C語言中采用ASCII,在大多數 系統中,一個char通常占1個字節,但是在0~127整數之間的字符映射,unicode向下兼容ASCII。而Java采用unicode來表示字符,一個中文或英文字符的unicode編碼都占2個字節,但如果采用其他編碼方式,一個字符占用的字節數則各不相同。
在 GB 2312 編碼或 GBK 編碼中,一個英文字母字符存儲需要1個字節,一個漢字字符存儲需要2個字節。 在UTF-8編碼中,一個英文字母字符存儲需要1個字節,一個漢字字符儲存需要3到4個字節。在UTF-16編碼中,一個英文字母字符存儲需要2個字節,一個漢字字符儲存需要3到4個字節(Unicode擴展區的一些漢字存儲需要4個字節)。在UTF-32編碼中,世界上任何字符的存儲都需要4個字節。
1、我的系統的默認編碼方式為GBK,因此對於字符串 “你好hello”,
如果調用length()方法返回其長度,得到的結果將為:7。該方法返回的是字符串的字符數,無論是中文字符還是英文字符,都被看做是一個字符。
如果將其轉換為byte數組,而后返回byte數組的長度,得到的結果將為:9。因為在GBK編碼中,中文占2個字節,而英文字符占1個字節。
執行如下代碼,將得到如下圖所示的輸出:
輸出結果如下圖:
2、將編碼方式為改為utf-8,即執行如下代碼:
對於字符串 “你好hello”,得到的輸出結果如下:
此時得到的的byte數組的長度為:11。因為在utf-8編碼中,該中文字符占了3個字節,英文字符占1個字節。
3、如果將編碼方式改為:utf-16,輸出結果如下:
此時得到的的byte數組的長度為:16。因為在utf-16編碼中,該中文字符占了3個字節,英文字符占2個字節。
3、如果將編碼方式改為:utf-32,輸出結果如下:
