今天看到一道題,是這樣子的:
package test;
public class Char {
public static void main(String[] args) {
char ch1 = 97;
char ch2 = 'a';
System.out.println("ch1=" + ch1);
System.out.println("ch2=" + ch2);
}
}
當時下意識作出判斷,輸出的結果分別應該是“ch1=97”和“ch2=a”,但答案都是a。於是補了一下這方面的知識點。
知識點:
char類型
1. char類型是一個單一的16位Unicode字符;
2. 最小值是\u0000(即為0);
3. 最大值是\uffff(即為65535);
4. char類型可以儲存任何字符。
char賦值
char a='a'; //任意單個字符,加單引號。
char a='中'; //任意單個中文字,加單引號。
char a=111; //整數。0~65535。十進制、八進制、十六進制均可。
輸出字符編碼表中對應的字符。
注:只能放單個字符。
char運算
char類型是可以運算的因為char在ASCII等字符編碼表中有對應的數值。
在JAVA中,對char類型字符運行時,直接當做ASCII表對應的整數來對待。
由char賦值可知,開篇提到的char ch1=97,賦值為整數97時,對應字符編碼ASCII表里的a,因此輸出為a。同理驗證,如果是98,對應的就是b,99對應c。
Java面試常見試題:
char類型變量中能不能存儲一個中文漢字,為什么?
答:char類型可以存儲一個中文漢字,因為Java中使用的編碼是Unicode(不選擇任何特定的編碼,直接使用字符在字符集中的編號,這是統一的唯一方法),一個char類型占2個字節(16比特),所以放一個中文是沒問題的。
示例:
char m='a'; ——a。
char m='a'+'b'; ——Ã。 //char類型相加,提升為int類型,輸出對應的字符。
int m='a'+'b'; ——195。//195沒有超出int范圍,直接輸出195。
char m='a'+b; ——報錯。//因為b是一個賦值的變量。
char m=197; ——Ã。 //輸出字符編碼表中對應的字符。
char m='197; ——報錯。//因為有單引號,表示是字符,只允許放單個字符。
char m='a'+1; ——b。//提升為int,計算結果98對應的字符是b。
char m='中'+'國'; ——42282。
char m='中'+'國'+'國'+'國'; ——報錯。int轉char有損失。因為結果已經超出char類型的范圍。
int m='中'+'國'+'國'+'國'; ——86820
char m='中'+1; ——丮。//1是int,結果提升為int,輸出對應的字符。
char m='中'+"國"; ——報錯。String無法轉換為char。
System.out.println('中'+"國"); ——中國。//沒有變量附值的過程。String與任何字符用“+”相連,轉換為String。