[面試原題]java
假設y是字符類型,初始化值爲‘b’,那麼如下語句輸出的結果是什麼?面試
A. System.out.println(++y);編碼
B. System.out.println(y+1);code
[正確答案]排序
A. ‘c’內存
B. 99unicode
[面試技術點]get
字符在java中的運算。字符編碼
[解讀A]擴展
char在java中稱爲「字符型」,佔2個字節。字符常量是用單引號括起的一個字符,且字符常量在內存中存儲的是該字符在Unicode字符集中的排序位置,即整數。
好比:
char y='b';
內存y中存儲的是字符’b’在Unicode字符集中的排序位置98。【能夠經過語句System.out.println((int)y);來獲取Unicode的排序位置。】所以上面的語句也能夠寫成:
char y=98;
System.out.println(++y);語句,先執行++y,結果爲99,而後輸出對應位置的字符’c’。
[解讀B]
博爲峯小博老師在這裏要給你們說一個概念,java中的「向上兼容」,即:不一樣數據類型的數據參與運算,數據類型要強制轉換,轉換的方向是:char->short->int->long->float->double。
在System.out.println(y+1);這個語句中,y是char類型,1是int類型,因此把y強轉成int,而後運算結果是99,輸出也是int類型99。
[擴展]
char是Java中的字符類型,與別的語言不一樣的是,char在Java中是16位的,由於Java用的是Unicode。不過8位的ASCII碼包含在Unicode中,是從0~127的。
Java中使用Unicode的緣由是,Java的Applet容許全世界範圍內運行,那它就須要一種能夠表述人類全部語言的字符編碼Unicode。可是English,Spanish,German, French根本不須要這麼表示,因此它們其實採用ASCII碼會更高效。這中間就存在一個權衡問題。
由於char是16位的,採起的Unicode的編碼方式,因此char就有如下的初始化方式:
char c='a'; //字符,能夠是漢字,由於是Unicode編碼,如char c=’我’,內存對應的unicode值爲:25105。
char c=十進制數,八進制數,十六進制數等等; //能夠用整數賦值
char c='\u數字'; //用字符的編碼值來初始化,如:char='\0',表示結束符,它的ascll碼是0,這句話的意思和 char c=0 是一個意思。
Unicode編碼表: