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