char是兩個字節!相信自己沒有錯
在《java虛擬機規范》一文中指出,char類型是兩個字節。但是我們的程序無論用什么方式獲取都無法獲取到正確的數據類型,原因如下:
1.如果程序代碼是String testStr=new String("c"),,,,等等使用String來作為中間解析的,不正確,因為java編碼分為內碼和外碼。什么是內碼呢?就是java程序在運行時使用的編碼;外碼就是對外表現的編碼。char類型在java運行時使用的是utf-16編碼,使用兩個字節。但是你卻用String來接,String的外碼是需要指定的,如果不指定就是jvm默認編碼,一般為gbk,所以肯定是不正確的。
2.又有人說了,utf-16即使作為內碼,但也是變長的,長度為兩個字節或者四個字節。我只想說,你說得對。在utf-16編碼的早期,該編碼方式是定長的(2字節),但由於后來扛不住越來越多的字符,所以擴展到了4個字節。注意:是擴展到,沒有3字節的utf-16。然而java出來的時候比較早,那個時候utf-16還是定長編碼,后來改了,沒辦法java為了做適配,就改用兩個char(敲黑板)來表示一個字符。
所以說,jvm中char在運行時表現的確實是兩個字節。但是當char參與運算的時候,會被轉為int(不僅是char,byte、short也都會被轉),所以此時是4個字節,運算完成后又被轉存成了兩個字節。