char數據類型是16位無符號Java基元數據類型。 它表示Unicode字元。請注意,char是無符號數據類型。 因此,char變數不能為負值。字元數據類型的範圍為0到65535,這與Unicode集的範圍相同。
字元字面量
字元字面量表示char數據類型的值。 Java中的字元字面量可以用以下格式表示:
- 字元需要用單引號括起來
- 作為字元轉義序列
- 作為
Unicode轉義序列 - 作為八進制轉義序列
字元可以通過用單引號括起來表示。以下代碼段使用此形式為char變數賦值:
char c1 = 'A';
char c2 = 'L';
char c3 = '5';
char c4 = '/';
用雙引號括起來的字元序列是一個String字面量。不能將字串文字分配給char變數,即使String文字只有一個字元。
字元轉義序列
字元字面量可以表示為字元轉義序列。字元轉義序列以反斜杠開頭,後面緊跟一個字元,並且都用單引號括起來。
有八個預定義的字元轉義序列,如下表所列。
| 字元轉義序列 | 描述 |
|---|---|
| ‘\n’ | 換行 |
| ‘\r’ | 回車 |
| ‘\f’ | 換頁 |
| ‘\b’ | 退格 |
| ‘\t’ | 製錶 |
| ‘\‘ | 反斜杠 |
| ‘\”‘ | 雙引號 |
| ‘\’’ | 單引號 |
Java中只有八個字元轉義序列。不能定義自己的字元轉義序列。
char c1 = '\n'; // Assigns a linefeed to c1
char c2 = '\"'; // Assigns double quote to c2
char c3 = '\a'; // A compile-time error. Invalid character escape sequence
Unicode
字元文字可以表示為“\uxxxx”形式的Unicode轉義序列。這裏,\u表示Unicode轉義序列的開始,xxxx正好表示四個十六進制數字。
由xxxx表示的值是字元的Unicode值。字元“A”的Unicode值為65。十進位值65可以用十六進製錶示為41。
因此,字元’A‘可以用Unicode轉義序列表示為’\u0041‘。以下代碼將相同的字元“A”分配給char變數c1和c2:
char c1 = 'A';
char c2 = '\u0041'; // Same as c2 = 'A'
字元文字可以表示為形式為’\nnn‘的八進制轉義序列。這裏,n是八進制數(0-7)。 八進制轉義序列的範圍是’\000‘到’\377‘。
八進制數377與十進位數255相同。因此,使用八進制轉義序列,可以表示Unicode代碼範圍從0到255個十進位整數的字元。
Unicode字元集(代碼範圍0到65535)可以表示為Unicode轉義序列(‘\uxxxx‘)。如果int文本在0-65535範圍內,可以為int變數賦值。
當為字元變數分配一個int字面量時,char變數表示其Unicode代碼等於該字串表示的值的字元。字元’a‘的Unicode代碼是97。十進位值97被表示為141八進制和61十六進制。
下麵的代碼顯示了如何使用int字面值97來表示Unicode字元’a‘。
char c1 = 97; // Same as
c1 = 'a';
c1 = '\141';
c1 = '\u0061';
示例-1
這裏是一個程式用來演示char變數:
public class Main {
public static void main(String args[]) {
char ch1, ch2;
ch1 = 88; // code for X
ch2 = 'Y';
System.out.print("ch1 and ch2: ");
System.out.println(ch1 + " " + ch2);
}
}
ch1被分配值88,它是對應於字母X的ASCII和Unicode值。ASCII字元集佔據Unicode字元集中的前127個值。
上面的代碼生成以下結果。
ch1 and ch2: X Y
實例-2
char用來保存Unicode字元,但它也可以用來保存整數類型,可以在其上執行算術運算。例如,可以將兩個字元添加在一起,或者增加一個字元變數的值。
在程式中,ch1首先給定值X。 接下來,ch1遞增。這導致ch1包含Y值,ASCII(和Unicode)序列中的下一個字元。
public class Main {
public static void main(String args[]) {
char ch1;
ch1 = 'X';
System.out.println("ch1 contains " + ch1);
ch1++; // increment ch1
System.out.println("ch1 is now " + ch1);
}
}
上面的代碼生成以下結果。
ch1 contains X
ch1 is now Y
