Java char數據類型

char數據類型是16位無符號Java基元數據類型。 它表示Unicode字符。請注意,char是無符號數據類型。 因此,char變量不能爲負值。字符數據類型的範圍爲065535,這與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變量c1c2

char c1  = 'A';
char c2  = '\u0041'; // Same as  c2  = 'A'

字符文字可以表示爲形式爲’\nnn‘的八進制轉義序列。這裏,n是八進制數(0-7)。 八進制轉義序列的範圍是’\000‘到’\377‘。
八進制數377與十進制數255相同。因此,使用八進制轉義序列,可以表示Unicode代碼範圍從0255個十進制整數的字符。

Unicode字符集(代碼範圍065535)可以表示爲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,它是對應於字母XASCIIUnicode值。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