溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java數(shù)據(jù)類型和字符集是什么

發(fā)布時(shí)間:2020-10-20 15:49:27 來(lái)源:億速云 閱讀:105 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹了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í)!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI