本章節(jié)目標(biāo):
理解數(shù)據(jù)類型的作用。Java中包括哪些數(shù)據(jù)類型?常見的八種基本數(shù)據(jù)類型都有哪些?會(huì)用八種基本數(shù)據(jù)類型聲明變量?什么是二進(jìn)制?原碼反碼補(bǔ)碼是什么?什么是字節(jié)?byte類型取值范圍?什么是字符編碼方式?每種數(shù)據(jù)類型在使用時(shí)的注意事項(xiàng)?基本數(shù)據(jù)類型之間的轉(zhuǎn)換?
Java的數(shù)據(jù)類型概述
幾乎所有的編程語(yǔ)言中都會(huì)有數(shù)據(jù)類型,什么是數(shù)據(jù)類型呢?軟件的存在主要是進(jìn)行數(shù)據(jù)的處理,現(xiàn)實(shí)生活中的數(shù)據(jù)會(huì)有很多,所以編程語(yǔ)言對(duì)其進(jìn)行了分門別類,然后不同的數(shù)據(jù)類型的數(shù)據(jù)會(huì)給其分配不同大小的空間進(jìn)行存儲(chǔ)。換句話說(shuō),java中的數(shù)據(jù)類型作用就是指導(dǎo)java虛擬機(jī)在程序運(yùn)行階段到底應(yīng)該給該變量分配多大的內(nèi)存空間。
● 基本數(shù)據(jù)類型
● 引用數(shù)據(jù)類型
● 整數(shù)型(不帶小數(shù)的數(shù)字):byte,short,int,long
● 浮點(diǎn)型(帶小數(shù)的數(shù)字):float,double
● 字符型(文字,單個(gè)字符):char
● 布爾型(真和假):boolean
java中除了以上的8種基本數(shù)據(jù)類型之外,其它的數(shù)據(jù)類型均屬于引用數(shù)據(jù)類型,也就是說(shuō)字符串在java中不屬于基本數(shù)據(jù)類型,而屬于引用數(shù)據(jù)類型。請(qǐng)看八種基本數(shù)據(jù)類型對(duì)照表:
數(shù)據(jù)類型 |
占用bit位 |
取值范圍 |
缺省默認(rèn)值 |
byte(字節(jié)型) |
1 |
[-128~127] |
0 |
short(短整型) |
2 |
[-32768~32767] |
0 |
int(整型) |
4 |
[-2147483648~2147483647] |
0 |
long(長(zhǎng)整型) |
8 |
|
0L |
float(單精度) |
4 |
|
0.0f |
double(雙精度) |
8 |
|
0.0 |
boolean(布爾型) |
1 |
true、false |
false |
char(字符型) |
2 |
[0~65535] |
‘\u0000’ |
接下來(lái)我們普及一下計(jì)算機(jī)基本知識(shí),計(jì)算機(jī)在任何情況下都只能識(shí)別二進(jìn)制,因?yàn)橛?jì)算機(jī)畢竟是一臺(tái)通電的機(jī)器,電流只有正極、負(fù)極,所以只能表示兩種情況,也就是1和0。什么是二進(jìn)制呢?滿2進(jìn)一位,請(qǐng)看對(duì)照表
十進(jìn)制 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
二進(jìn)制 |
0 |
1 |
10 |
11 |
100 |
101 |
110 |
111 |
1000 |
1001 |
1010 |
1011 |
十進(jìn)制和二進(jìn)制之間的轉(zhuǎn)換規(guī)則:
● 十進(jìn)制轉(zhuǎn)換成二進(jìn)制:比方說(shuō)十進(jìn)制數(shù)65轉(zhuǎn)換成二進(jìn)制代碼,我們可以使用短除法,65對(duì)2整除商32余數(shù)為1,把1寫在旁邊,接著32對(duì)2整除商16余數(shù)為0,把0寫在旁邊,用16整除2商0余數(shù)為0,把0寫在旁邊,這樣進(jìn)行下去直至商為0時(shí)為止。然后把余數(shù)逆序排列就得到了65的二進(jìn)制代碼。
● 二進(jìn)制轉(zhuǎn)換成十進(jìn)制:比方說(shuō)二進(jìn)制代碼為1000001的十進(jìn)制數(shù)是多少呢?可以采用按權(quán)相加的方法,對(duì)于二進(jìn)制代碼1000001首先從右邊第一位起對(duì)應(yīng)2的零次方,第二位對(duì)應(yīng)2的一次方,以此類推,把相應(yīng)的數(shù)位與權(quán)值相乘得到的積相加即可,即2^0*1+0*2^1+0*2^2+0*2^3+0*2^4+0*2^5+1*2^6=65
接下來(lái)我們來(lái)看一下byte類型的取值范圍:首先byte屬于字節(jié)型,占用空間大小是1個(gè)字節(jié)byte,1個(gè)byte是8個(gè)bit位,二進(jìn)制位中的一個(gè)1或者一個(gè)0就是一個(gè)bit位,而java中的數(shù)字有正負(fù)之分,二進(jìn)制位中最左邊的數(shù)字表示符號(hào)位,0表示正數(shù),1表示負(fù)數(shù),所以byte類型最大值是:01111111,將這個(gè)二進(jìn)制位轉(zhuǎn)換為十進(jìn)制是:127。byte類型最小值是-128,也就是說(shuō)1個(gè)字節(jié)可以表示256種不同形式。另外還需要給大家普及一下計(jì)算機(jī)的容量換算單位:
1byte = 8bit
1KB = 1024byte
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
對(duì)于以上的八種基本數(shù)據(jù)類型來(lái)說(shuō),其中七種類型byte,short,int,long,float,double,boolean計(jì)算機(jī)表示起來(lái)是很容易的,因?yàn)檫@七種類型底層直接就是數(shù)字,十進(jìn)制的數(shù)字和二進(jìn)制之間有固定的轉(zhuǎn)換規(guī)則,其中boolean類型只有true和false,而true底層實(shí)際上是1,false底層實(shí)際上是0。除了以上的七種數(shù)據(jù)類型之外,還有一種類型叫做字符型char,這個(gè)對(duì)于計(jì)算機(jī)來(lái)說(shuō)表示起來(lái)就不是那么容易了,因?yàn)樽址吘故乾F(xiàn)實(shí)世界當(dāng)中的文字,計(jì)算機(jī)是如何表示文字的呢?
起初的計(jì)算機(jī)實(shí)際上只支持?jǐn)?shù)字的,因?yàn)橛?jì)算機(jī)起初就是為了科學(xué)計(jì)算,隨著計(jì)算機(jī)的發(fā)展,為了讓計(jì)算機(jī)起到更大的作用,因此我們需要讓計(jì)算機(jī)支持現(xiàn)實(shí)世界當(dāng)中的文字,這個(gè)時(shí)候某個(gè)標(biāo)準(zhǔn)協(xié)會(huì)就制定了字符編碼(字符集),字符編碼就是一張對(duì)照表,在這個(gè)對(duì)照表上描述了某個(gè)文字與二進(jìn)制之間的轉(zhuǎn)換關(guān)系。
最初的時(shí)候美國(guó)標(biāo)準(zhǔn)協(xié)會(huì)制定了ASCII碼,ASCII碼采用1個(gè)字節(jié)編碼,大家是否還記得1個(gè)字節(jié)可以表示256種不同的形式,對(duì)于美國(guó)來(lái)說(shuō)這個(gè)足夠了,因?yàn)橛⑽膯卧~就是由26個(gè)英文字母拼湊而成,大小寫全部才52個(gè),再加上標(biāo)點(diǎn)符號(hào)也不會(huì)超過(guò)256個(gè)。ASCII碼中規(guī)定’a’對(duì)應(yīng)97,’b’對(duì)應(yīng)98,以此類推,’A’對(duì)應(yīng)65,’B’對(duì)應(yīng)66,以此類推,’0’字符對(duì)應(yīng)48,’1’字符對(duì)應(yīng)49,以此類推,這些常見的編碼還是需要大家記住的。
什么是編碼?什么是解碼?我們拿’a’來(lái)解釋:
● ‘a’ ----(以ASCII字符集進(jìn)行編碼)----> 01100001
● 01100001----(以ASCII字符集進(jìn)行解碼)----> ‘a’
大家一定要注意:編碼和解碼要采用同一種字符編碼方式(要采用同一個(gè)對(duì)照表),不然會(huì)出現(xiàn)亂碼。
隨著計(jì)算機(jī)的不斷發(fā)展,為了讓計(jì)算機(jī)支持更多國(guó)家的語(yǔ)言,國(guó)際標(biāo)準(zhǔn)組織又制定了ISO-8859-1字符集,又被稱為latin-1,向上兼容ASCII碼,仍不支持中文,主要支持西歐語(yǔ)言。
當(dāng)計(jì)算機(jī)發(fā)展到亞洲的時(shí)候,計(jì)算機(jī)開始支持簡(jiǎn)體中文、繁體中文、日本語(yǔ)、朝鮮語(yǔ)等,其中支持簡(jiǎn)體中文的字符集包括:GB2312 < GBK < GB18030,它們的容量大小不同。支持繁體中文的大五碼Big5等。
后來(lái),國(guó)際組織制定了一種字符編碼方式,叫做Unicode編碼,這種編碼方式統(tǒng)一了全球所有國(guó)家的文字,具體的實(shí)現(xiàn)包括:UTF-8,UTF-16,UTF-32等。
java為了國(guó)際化,為了支持所有國(guó)家的語(yǔ)言,所以java采用的編碼方式為Unicode編碼。例如’中’對(duì)應(yīng)的Unicode碼是’\u4e2d’。在實(shí)際開發(fā)中幾乎所有的團(tuán)隊(duì)都會(huì)使用Unicode編碼方式,因?yàn)檫@種方式更通用,兼容性更好。