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