char字元
Prerequisites:
記憶體大小
Java的char與c++的char占據記憶體大小不一樣,Java占據2byte記憶體空間,C++占據1byte記憶體空間。
名稱 | byte數 | 範圍 |
---|---|---|
char | 2 byte | $-2 ^{15}$ 至 $2 ^{15} - 1$ |
語法
是使用'',包住字元。
1
char ch = 'B';
以下是錯誤寫法,""這個是字串,不是字元。
1
char ch = "B";
跳脫字元
跳脫字元雖然是用2個字元組成,但對java編譯器來說,跳脫字元視為1個字元。
1
2
char ch1 = '\t';
char ch2 = '\n';
數字
若輸入數字97,會顯示97對映的Ascii Code。
1
2
char ch = 97;
System.out.println(ch);
a
顯示Ascii Code
1
2
char ch = 'B';
System.out.println((int)ch);
66
Unicode
顯示中文Unicode
Ascii Code只能支持英語美語,大小只有128,只有正整數沒有負數。
因為要支援其它國家的語言,才會有Unicode,Unicode包含Ascii,中文字佔2byte、英文字佔2byte,但英文字占太多記憶體大小。
utf-8,比Unicode更省記憶體大小,英文佔1byte,中文佔3byte。
1
2
3
4
char ch = '西';
System.out.println(ch);
// 顯示Unicode
System.out.println((int)ch);
西
35199
Unicode轉中文
將Unicode指派給char變數,會顯示Unicode表對映的中文字。
1
2
char ch = 35199;
System.out.println(ch);
西
char計算
以下的int 1,不需要強制轉型成char,在指派數字給char時,會先檢查「範圍大小」,若符合範圍,編譯器會自動轉型。
1
2
3
char ch = 'a' + 1;
System.out.println(ch);
System.out.println((int)ch);
b
98
強制轉型
以下把int強制轉型成char。
1
2
3
int i2 = 98;
char ch2 = (char) i2;
System.out.println(ch2);
b
char指派給其它基本型態
char無法指派給byte與short。
char是2byte,可以指派給int(4byte), long(8byte), float(4byte), double(8byte)。
1
2
3
4
5
6
7
8
9
char ch3 = 'b';
int i3 = ch3;
long l1 = ch3;
float f = ch3;
double d4 = ch3;
System.out.println(i3);
System.out.println(l1);
System.out.println(f);
System.out.println(d4);
98
98
98.0
98.0
char可以與其它型態計算。
1
2
3
char ch3 = 'b';
double d4 = 1.8 + 2.3f + ch3;
System.out.println(d4);
102.09999995231628
String轉成char
String 轉 char,使用charAt()
1
2
char c1 = "Hello".charAt(1);
System.out.println(c1);
e