1. 程式人生 > >java基礎之字元、位元組的概念及其區別

java基礎之字元、位元組的概念及其區別

轉載自:http://blog.sina.com.cn/s/blog_6ede15b10100nrxp.html

轉載▼

       首先我們先看一下這個問題:“Java語言中字串“學Java”所佔的記憶體空間是幾個位元組?”,要回答這個問題我們就必須先要清楚什麼是“位元組”什麼是“字元”。

       位元組(Byte):位元組是通過網路傳輸資訊(或在硬碟或記憶體中儲存資訊)的單位。位元組是計算機資訊科技用於計量儲存容量和傳輸容量的一種計量單位,1個位元組等於8位二進位制,它是一個8位的二進位制數,是一個很具體的儲存空間。

       字元:人們使用的記號,抽象意義上的一個符號。 '1', '中', 'a', '$', '¥', ……

       談到字元就不得不提ANSI及UNICODE兩種不同的編碼方式標準(對這兩種編碼方式標準在此我只簡單提一下,如果大家有興趣可以自己去查一下),ANSI中的字符采用8bit,而UNICODE中的字符采用16bit。(對於字元來說ANSI以單位元組存放英文字元,以雙位元組存放中文等字元,而Unicode下,英文和中文的字元都以雙位元組存放)Unicode碼也是一種國際標準編碼,採用二個位元組編碼,與ANSI碼不相容。     ANSI規定:一個小於127的字元的意義與原來相同,但兩個大於127的字元連在一起時,就表示一個漢字,前面的一個位元組(他稱之為高位元組)從0xA1用到 0xF7,後面一個位元組(低位元組)從0xA1到0xFE,這樣我們就可以組合出大約7000多個簡體漢字了。在這些編碼裡,我們還把數學符號、羅馬希臘的字母、日文的假名們都編進去了,連在 ASCII 裡本來就有的數字、標點、字母都統統重新編了兩個位元組長的編碼,這就是常說的"全形"字元,而原來在127號以下的那些就叫"半形"字元了。從 UNICODE 開始,無論是半形的英文字母,還是全形的漢字,它們都是統一的"一個字元"!同時,也都是統一的"兩個位元組"。

       我們可以簡單的記這樣一個結論:按照ANSI編碼標準,標點符號、數字、大小寫字母都佔一個位元組,漢字佔2個位元組。按照UNICODE標準所有字元都佔2個位元組。

       我們再來看一下字串,由於字元有2種編碼標準,所以字串也分為2種。

       字串(ANSI):在記憶體中,如果“字元”是以 ANSI 編碼形式存在的,一個字元可能使用一個位元組或多個位元組來表示,那麼我們稱這種字串為 ANSI 字串或者多位元組字串。

       字串(UNICODE):在記憶體中,如果“字元”是以在 UNICODE 中的序號存在的,那麼我們稱這種字串為 UNICODE 字串或者寬位元組字串。

       由於不同 ANSI 編碼所規定的標準是不相同的,因此,對於一個給定的多位元組字串,我們必須知道它採用的是哪一種編碼規則,才能夠知道它包含了哪些“字元”。而對於 UNICODE 字串來說,不管在什麼環境下,它所代表的“字元”內容總是不變的。

       至此我們在上面提出的問題就迎刃而解了,因為在Java當中字元是採用Unicode編碼標準的,所以“學Java”這個字串在Java語言中佔10個位元組。