1、JAVA中,char占2字節,16位。可在存放漢字
2、char賦值
char a='a'; //任意單個字符,加單引號。
char a='中';//任意單個中文字,加單引號。
char a=111;//整數。0~65535。十進制、八進制、十六進制均可。輸出字符編碼表中對應的字符。
注:只能放單個字符。
3、char運算
char類型是可以運算的因為char在ASCII等字符編碼表中有對應的數值。
在JAVA中,對char類型字符運行時,直接當做ASCII表對應的整數來對待。
示例1:
char m='a'; -->a
char m='a'+'b'; -->? //char類型相加,提升為int類型,輸出對應的字符(a和b分別對應
的數值為97和98,相加等於195,其對應的字符為 ?)。
int m='a'+'b'; -->195 //195沒有超出int范圍,直接輸出195。
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。
示例2:
char a = 97; -->為char類型變量 a 賦值常量值 97。
char b = 'a'+3; -->d // 97+3=100,ASCII對應的字符為 d。
char c = a+3; -->報錯 //無法從int類型轉換為char類型,接下來讓我們了解下為什么會不
能這樣運算:
首先,我們先知道在jvm內存機制中,char類型數據運算是將字符在ASCII表對應的整數以int類型參與運算(可以認為' a '=97),常量(97)與常量(3)運算得到一個新的常量(100),常量賦值給變量(b),不存在強制轉換,只要這個接受變量(b)的類型范圍大於這個常量即可。而變量聲明時需要定義數據類型(例:char a),內存就為這個變量划分一個char類型大小的空間,其中變量(a)的值是可變的,而常量(3)的值是不變的,兩個運算得到的還是一個變量,本例中(a+3)是int類型的變量,而int類型變量(a+3)賦值給char類型變量(c)需要強制轉換,因此會報錯。
char c=(char)(a+3); -->d
總結:
用單引號' '標識,只能放單個字符。
char+char,char+int——類型均提升為int,附值char變量后,輸出字符編碼表中對應的字符。
為什么char類型的變量可以賦值為整型數字?
char在java中是unicode編碼
Java中對char型數據,在內存中存的就是整數,對應一張ASCII碼表 ,比如說字符知 'A' 對應的是65
字符 'a' 對應的是97 ,道所以char c1 = 'A' ; 等效於 char c1 = 65 ;
正是因為這樣,所以字符型數據既可以作為一個字符使用,也可以作為一個整數使用,所以char型數據可以和int型數據進行運算!
比如 'A' + 1 的結果如果用char型變量接收就是 ‘B’ , 用int型變量接收就是66
char c = 'A'+1; 最后c為'B'
int i = 'A' + 1 ; 最后i為 66
雖然char型是以整數存儲,但是和int型還是有一定區別的,表現在取值范圍上,
char型 占2個字節 無符號 范圍是0~65535
所以char c = 65536 就會報錯了,專因為越界了