Java開發筆記(三十二)字符型與整型相互轉化

前面提到字符類型是一種新的變量類型,然而編碼實踐的過程當中卻發現,某個具體的字符值竟然能夠賦值給整型變量!就像下面的例子代碼那樣,把字符值賦給整型變量,編譯器不但沒報錯,並且還能正常運行!html

	// 字符容許直接賦值給整型變量
	private static void charToInt() {
		int a = 'A';
		System.out.println("int a="+a);
		int tian = '田';
		System.out.println("int tian="+tian);
	}

 

立刻運行上面的測試代碼,輸出日誌以下所示:java

int a=65
int tian=30000

 

之因此出現字符變成整數的狀況,是由於計算機爲了方便處理,將包括英文在內的拉丁字母都採用數字編碼,這樣字符才能保存在只認得二進制數的計算機系統當中。由於計算機編程誕生在西方,因此早期編程語言只支持英語和其餘西歐語言。英文字母才26個,區分大小寫也才52個,加上標點符號等等,屈指一算總共128個頂天了,只消一個字節來表達西方世界的字符綽綽有餘(一個字節爲8位二進制數,可表達255個數值)。這套單字節的字符編碼標準源自美國,故而它被稱做ASCII碼(全稱American Standard Code for Information Interchange,意思是美國信息交換標準代碼)。
但是計算機編程傳播到其它國家時發現了問題,不少國家都有本身的語言文字,像經常使用的漢字就有三千多個,單字節的ASCII碼根本不夠用。因而後來又制定了DBCS標準(Double-Byte Character Set,意思是雙字節字符集),該標準使用兩個字節來表示一個字符,這樣一共能夠表示256*256-1=65535個字符,其中前128個字符與ASCII碼保持一致,剩餘的位置留給了別的語言文字和擴展符號。其中以漢字爲主的東亞象形文字佔據了從0x3000到0x9FFF之間的編碼,足足佔去了DBCS全部字符的十六分之七,真要感謝老祖宗的聰明才智,爲數千年以後的咱們爭取了將近一半的編碼空間。
既然字符值容許直接賦給整型變量,反過來整數(0-65535)也能直接賦給字符變量。譬如整數65賦值給字符變量就變成了字母「A」,整數30000賦值給字符變量就變成了漢字「田」。固然只有0到65535之間的整數才能正常給字符變量賦值,由於其它整數不在Java的字符型範圍以內。下面是將整數賦值給字符型變量代碼例子:編程

	// 0-65535之間的整數容許直接賦值給字符變量。字符類型佔兩個字節
	private static void intToChar() {
		char a = 65;
		System.out.println("char a="+a);
		char tian = 30000;
		System.out.println("char tian="+tian);
		// 以漢字爲主的東亞象形文字(中日韓)佔據了從0x3000到0x9FFF之間的編碼
		char begin = 0x3000;
		System.out.println("chinese begin="+begin);
		char end = 0x9FFF;
		System.out.println("chinese end="+end);
		char max = 65535; // 字符型可表達的範圍是0-65535
		System.out.println("char max="+max);
	}

 

上面說道整型數與字符型之間容許直接相互賦值,也就是說能夠把字符變量看成整型變量看待,這意味着字符變量也能參與加減乘除四則運算。不過一旦字符變量參與計算,因爲編譯器不能肯定計算結果是否還落在0-65535的整數區間,所以就必須顯式把運算結果強制轉換成字符char類型。以打印全部的大寫英文字母爲例,只要指定了初始字符爲「A」,那麼便能對初始字符逐次加一,從而完成從「A」到「Z」之間全部字符的遍歷操做。具體的大寫字母遍歷代碼示例以下:api

	// 字符變量容許跟整數直接加減乘除
	private static void printCapital() {
		char a = 'A';
		for (int i=0; i<26; i++) {
			// 由於不肯定a+i之和是否超出0-65535的範圍,全部須要強制轉換成字符類型
			char capital = (char) (a+i);
			System.out.println("capital="+capital);
		}
	}

  

更多Java技術文章參見《Java開發筆記(序)章節目錄編程語言

相關文章
相關標籤/搜索