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