在Java中,char的長度是2字節,即16位,2的16次方是65536。
1、如果采用utf-8編碼,一個漢字占3個字節,char為什么還能存下一個漢字呢?
參考:https://developer.aliyun.com/ask/65417?spm=a2c6h.13159736、https://blog.csdn.net/shipfei_csdn/article/details/81900952、https://blog.csdn.net/Sugar_Z_/article/details/51276984
因為Java使用Unicode字符集,Unicode用兩個字節表示世界上所有的文字集合。utf-8是字符編碼。字符集和字符編碼不一樣。
一個java文件使用utf-8編碼,經過編譯之后,使用unicode字符集。
字符集,就是包含各種字符的集合。utf-8是用來給unicode進行編碼的。
utf-8字符編碼,就是把字符和字節對應起來的一種方式。
2、遇到生僻字,String是咋存的?
示例代碼:
public static void charTest() { String s = "𥔲"; System.out.println(s + ",length:" + s.length()); for(int i=0; i<s.length(); i++) { int num = s.charAt(i); System.out.println(s.charAt(i) + "---" + num); } }
打印結果:
𥔲,length:2
?---55381
?---56626
證明:char只能存儲特定范圍內的漢字,超過了還是存不下。
