這篇文章帶給大家的內容是關於Java資料型別和字元集的介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
什麼是資料型態
簡單理解就是資料的型別。
what?數據怎麼會有類型?資料不就是0或1組成的字節碼嗎?
沒錯,在電腦中,只能儲存0或1,也就是說從儲存的角度來看,根本沒有型別這種東西,它們確實不過就是0或1組成的字節碼。
那為什麼還會有資料型別?
因為,類型是相當於程式設計者(人)來說的,人把資料分成不同的型別,方便理解,方便計算。
例如:
int a = 0x61; char b = 0x61; float c = 0x61; double d = 0x61; System.out.println(a+" "+b+" "+c+" "+d);
輸出結果是:97 a 97.0 97.0。
四個不同類型的變量,給與相同的字節碼0x61,但是輸出竟然不同! why?
因為程式設計者(人)給0x61這個16進制數賦予了類型,或者說給它賦予了意義。
為什麼要賦予類型(意義)?是為了讓0或1的字節碼能夠表示更具體的東西,或是說把它映射為人能理解的東西。
不設定類型,也可以對0x61這個數字進行各種運算,但是。 。 。 what is the meaning?
沒有意義,對於一個整數進行加減乘除具有現實意義,對於一個字符小寫變大寫具有現實意義,可是對於一個二進制數的操作卻是沒有意義的。人不能理解的事是沒有意義的。
那麼什麼是資料型別?
就是人看待資料的方式,人理解資料的方式,人規定資料的方式,這就是資料類型。
資料之所以有類型,那取決於人的看法,而不卻決於資料本身,資料本身是沒有類型的。
為什麼上面程式的輸出會不同?
因為輸出就是把資料變成人想要的格式顯示給人看。
電腦怎麼知道人想要什麼格式? 透過資料型態!
當0x61被規定為int型時電腦就知道應該顯示十進位數6*16 1 = 97。
當0x61被規定為char型時計算機就知道應該顯示十進位數6*16 1 = 97代表的ascii碼所對應的字元'a'。
雖然它們在計算機中都是同一個字節碼0x61,但是因為人規定了類型,所以計算機才回傳不同的結果。
從編解碼的角度來看
#編碼是訊息從一種形式或格式轉換為另一種形式的過程,解碼,是編碼的逆過程。
具體來講編碼就是,把人理解的東西轉換成電腦理解的東西,而解碼則是把電腦理解的東西轉換成人理解的東西。
計算機理解什麼?只理解0和1,人呢? almost everything。
它們之間轉換的橋樑是什麼? 就是資料型態! 人只有規定了資料的類型,規定人所理解的事情如何轉換為電腦理解的字節碼,才能完成這種轉換!
舉例:
對於97這個數字,人可以理解它為一個十進制數,但是電腦只能理解0或1,那麼如何讓電腦理解?給97編碼。 how?如果用二進位編碼,則把97變成了1100001這個數。這樣電腦就理解(能儲存和計算)了,那麼人怎麼理解1100001這個二進位碼呢?計算機在顯示的時候把1100001這個數字進行二進制解碼,解碼成97,人就理解了,而之所以能轉換,是因為規定了二進制編碼解碼的規則,並且規定了它是個整數。而對於'a'這個字符,人理解為它是一個小寫字母a,如何讓計算機理解?還是編碼?編什麼碼?編ASCII碼,'a'的ASCII碼是1100001,這樣電腦又理解(能儲存與運算)了,電腦如何讓人理解1100001,解碼! ASCII解碼,就變成了'a',這樣人就又理解了! 。
不同的事物,使用不同的編碼方式可能得到相同的二進位碼,而相同的二進位碼,使用不同的解碼方式會被理解為不同的事物!
本質上來講什麼是資料型別?
其實就是資料的編解碼的方式! ! !
最後,什麼是字元集?
就是字元的編碼解碼的方式!
不同字元集,規定了字元的編碼(字元轉換為二進位數)和解碼(二進位數轉換為字元)方式。
System.out.println("你好".getBytes("utf-8") ); System.out.println("你好".getBytes("gbk") );
#輸出:
[B@677327b6
[B@14ae5a5
可以看到不同的字元集(utf-8和gbk)把相同的中文"你好",編碼成了不同的二進位碼。
當然,上面輸出並不是0和1,顯然不是二進位碼。 。 。那是因為電腦顯示的時候把二進位碼使用ASCII碼幫你解了碼。 。 。都變成了ASCII字元。 why?我並不想讓它解碼,但是顯示就是解碼! ! !
當然透過一些技巧可以輸出二進位的字串,但是這個不是重點,這裡就不給了。
最後的最後
電腦最早在什麼領域應用了編解碼?
組合語言!
電腦指令也是二進位碼,把組合語言的英文單字變成二進位碼就是編碼,而把二進位碼變成組合語言的單字就是解碼!
以上是Java資料類型和字元集的介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!