您好,登錄后才能下訂單哦!
這篇文章主要介紹了Java數(shù)據(jù)類型和字符集是什么,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
什么是數(shù)據(jù)類型
簡(jiǎn)單理解就是數(shù)據(jù)的類型。
what?數(shù)據(jù)怎么會(huì)有類型?數(shù)據(jù)難道不就是0或者1組成的字節(jié)碼嗎?
沒(méi)錯(cuò),在計(jì)算機(jī)中,只能存儲(chǔ)0或者1,也就是說(shuō)從存儲(chǔ)的角度來(lái)看,根本沒(méi)有類型這種東西,它們確實(shí)不過(guò)就是0或者1組成的字節(jié)碼。
那為什么還會(huì)有數(shù)據(jù)類型?
因?yàn)?,類型是相?dāng)于編程者(人)來(lái)說(shuō)的,人把數(shù)據(jù)分成不同的類型,方便理解,方便計(jì)算。
比如:
int a = 0x61; char b = 0x61; float c = 0x61; double d = 0x61; System.out.println(a+" "+b+" "+c+" "+d);
輸出結(jié)果是:97 a 97.0 97.0。
四個(gè)不同類型的變量,給與相同的字節(jié)碼0x61,但是輸出竟然不同!why?
因?yàn)榫幊陶?人)給0x61這個(gè)16進(jìn)制數(shù)賦予了類型,或者說(shuō)給它賦予了含義。
為什么要賦予類型(含義)?是為了讓0或1的字節(jié)碼能夠表示更具體的東西,或是說(shuō)把它映射為人能理解的東西。
不設(shè)置類型,也可以對(duì)0x61這個(gè)數(shù)進(jìn)行各種運(yùn)算,但是。。。what is the meaning?
沒(méi)有意義,對(duì)于一個(gè)整數(shù)進(jìn)行加減乘除具有現(xiàn)實(shí)意義,對(duì)于一個(gè)字符小寫變大寫具有現(xiàn)實(shí)意義,可是對(duì)于一個(gè)二進(jìn)制數(shù)的操作卻是沒(méi)有意義的。人不能理解的事情是沒(méi)有意義的。
那么什么是數(shù)據(jù)類型?
就是人看待數(shù)據(jù)的方式,人理解數(shù)據(jù)的方式,人規(guī)定數(shù)據(jù)的方式,這就是數(shù)據(jù)類型。
數(shù)據(jù)之所以有類型,那取決于人的看法,而不卻決于數(shù)據(jù)本身,數(shù)據(jù)本身是沒(méi)有類型的。
為什么上面程序的輸出不同?
因?yàn)檩敵鼍褪前褦?shù)據(jù)變成人想要的格式顯示給人看。
計(jì)算機(jī)怎么知道人想要什么格式?通過(guò)數(shù)據(jù)類型!
當(dāng)0x61被規(guī)定為int型時(shí)計(jì)算機(jī)就知道應(yīng)該顯示十進(jìn)制數(shù)6*16+1 = 97。
當(dāng)0x61被規(guī)定為char型時(shí)計(jì)算機(jī)就知道應(yīng)該顯示十進(jìn)制數(shù)6*16+1 = 97代表的ascii碼所對(duì)應(yīng)的字符'a'。
雖然它們?cè)谟?jì)算機(jī)中都是同一個(gè)字節(jié)碼0x61,但是因?yàn)槿艘?guī)定了類型,所以計(jì)算機(jī)才返回不同的結(jié)果。
從編解碼的角度來(lái)看
編碼是信息從一種形式或格式轉(zhuǎn)換為另一種形式的過(guò)程,解碼,是編碼的逆過(guò)程。
具體來(lái)講編碼就是,把人理解的東西轉(zhuǎn)換為計(jì)算機(jī)理解的東西,而解碼則是把計(jì)算機(jī)理解的東西轉(zhuǎn)換為人理解的東西。
計(jì)算機(jī)理解什么?只理解0和1,人呢?almost everything。
它們之間轉(zhuǎn)換的橋梁是什么?就是數(shù)據(jù)類型!人只有規(guī)定了數(shù)據(jù)的類型,規(guī)定人所理解的事情如何轉(zhuǎn)換為計(jì)算機(jī)理解的字節(jié)碼,才能完成這種轉(zhuǎn)換!
舉例:
對(duì)于97這個(gè)數(shù)字,人可以理解它為一個(gè)十進(jìn)制數(shù),但是計(jì)算機(jī)只能理解0或者1,那么如何讓計(jì)算機(jī)理解?給97編碼。how?如果用二進(jìn)制編碼,則把97變成了1100001這個(gè)數(shù)。這樣計(jì)算機(jī)就理解(能存儲(chǔ)和計(jì)算)了,那么人怎么理解1100001這個(gè)二進(jìn)制碼呢?計(jì)算機(jī)在顯示的時(shí)候把1100001這個(gè)數(shù)進(jìn)行二進(jìn)制解碼,解碼成97,人就理解了,而之所以能轉(zhuǎn)換,是因?yàn)橐?guī)定了二進(jìn)制編碼解碼的規(guī)則,并且規(guī)定了它是個(gè)整數(shù)。而對(duì)于'a'這個(gè)字符,人理解為它是一個(gè)小寫字母a,如何讓計(jì)算機(jī)理解?還是編碼?編什么碼?編ASCII碼,'a'的ASCII碼是1100001,這樣計(jì)算機(jī)又理解(能存儲(chǔ)和計(jì)算)了,計(jì)算機(jī)如何讓人理解1100001,解碼!ASCII解碼,就變成了'a',這樣人就又理解了!。
不同的事物,使用不同的編碼方式可能得到相同的二進(jìn)制碼,而相同的二進(jìn)制碼,使用不同的解碼方式會(huì)被理解為不同的事物!
從本質(zhì)上來(lái)講什么是數(shù)據(jù)類型?
其實(shí)就是數(shù)據(jù)的編解碼的方式!?。?/p>
最后,什么是字符集?
就是對(duì)字符的編碼解碼的方式!
不同字符集,規(guī)定了字符的編碼(字符轉(zhuǎn)換為二進(jìn)制數(shù))和解碼(二進(jìn)制數(shù)轉(zhuǎn)換為字符)方式。
System.out.println("你好".getBytes("utf-8") ); System.out.println("你好".getBytes("gbk") );
輸出:
[B@677327b6
[B@14ae5a5
可以看到不同的字符集(utf-8和gbk)把相同的中文"你好",編碼成了不同的二進(jìn)制碼。
當(dāng)然,上面輸出并不是0和1,顯然不是二進(jìn)制碼。。。那是因?yàn)橛?jì)算機(jī)顯示的時(shí)候把二進(jìn)制碼使用ASCII碼幫你解了碼。。。都變成了ASCII字符。why?我并不想讓它解碼,但是顯示就是解碼?。。?/p>
當(dāng)然通過(guò)一些技巧可以輸出二進(jìn)制的字符串,但是這個(gè)不是重點(diǎn),這里就不給出了。
最后的最后
計(jì)算機(jī)最早在什么領(lǐng)域應(yīng)用了編解碼?
匯編語(yǔ)言!
計(jì)算機(jī)命令也是二進(jìn)制碼,把匯編語(yǔ)言的英語(yǔ)單詞變成二進(jìn)制碼就是編碼,而把二進(jìn)制碼變成匯編語(yǔ)言的單詞就是解碼!
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享Java數(shù)據(jù)類型和字符集是什么內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問(wèn)題就找億速云,詳細(xì)的解決方法等著你來(lái)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。