1. 簡(jiǎn)介
所謂的基本數(shù)據(jù)類型,是指CPU可以直接進(jìn)行運(yùn)算的類型,包括以下幾種:
● 整數(shù)型:byte、short、int、long;
● 浮點(diǎn)型:float、double;
● 字符型:char;
● 布爾型:boolean
2. 整數(shù)型
2.1 byte
byte是字節(jié)類型,1個(gè)byte占8位,代表有符號(hào)的、以二進(jìn)制補(bǔ)碼表示的整數(shù),具有如下特點(diǎn):
● 最小值是 -128(-2^7);
● 最大值是 127(2^7-1);
● 默認(rèn)值是 0;
● byte 類型比較節(jié)約空間,因?yàn)?byte 變量占用的空間只有 int 類型的四分之一。
public class TypeDemo01 { public static void main(String[] args) { // 定義byte類型的變量 // byte b = 10; // byte b = 127; byte b = -128; System.out.println(b); //注意:如下定義,在編譯階段就會(huì)出錯(cuò) //byte b = 128; //System.out.println(b); }}
注意:
因?yàn)閎yte的取值范圍在-128~127之間,如果我們定義byte變量的值=128,就超過(guò)了byte的范圍,所以在編譯階段就會(huì)出錯(cuò),“Type mismatch: cannot convert from int to byte”,意思是“類型不匹配:無(wú)法從byte轉(zhuǎn)為int”,如下圖所示:
2.2 short
short 是短整型,占16 位,代表有符號(hào)的、以二進(jìn)制補(bǔ)碼表示的整數(shù),具有如下特點(diǎn):
● 最小值是 -32768(-2^15);
● 最大值是 32767(2^15 - 1);
● 默認(rèn)值是 0;
● short 數(shù)據(jù)類型也可以像 byte 那樣節(jié)省空間,一個(gè)short變量是int型變量所占空間的二分之一。
public class TypeDemo01 { public static void main(String[] args) { //定義short類型的變量 //short s = 128; short s = 12800; System.out.println(s); }}
2.3 int
int 是整型,占32位,代表有符號(hào)的、以二進(jìn)制補(bǔ)碼表示的整數(shù),如有如下特點(diǎn):
● 最小值是 -2,147,483,648(-2^31);
● 最大值是 2,147,483,647(2^31 - 1);
● 默認(rèn)值是 0 ;
● 我們?cè)陂_發(fā)時(shí),一般都是用int表示整型變量。
public class TypeDemo01 { public static void main(String[] args) { //定義int類型的變量 int i = 100000; System.out.println(i); }}
2.4 long
long 是長(zhǎng)整型,占64 位,代表有符號(hào)的、以二進(jìn)制補(bǔ)碼表示的整數(shù),如有如下特點(diǎn):
● 最小值是 -9,223,372,036,854,775,808(-2^63);
● 最大值是 9,223,372,036,854,775,807(2^63 -1);
● 默認(rèn)值是 0L,"L"理論上不區(qū)分大小寫,但若寫成小寫的"l",容易與數(shù)字"1"混淆,不容易分辯,所以最好寫成大寫的“L”;
● 該類型主要用在需要較大數(shù)值的場(chǎng)景中。
public class TypeDemo01 { public static void main(String[] args) { //定義long類型的變量,后面要帶L或l(不是1,也不是i) long l = 364748123123L; System.out.println(l); }}
2.5 補(bǔ)充說(shuō)明
Java中只定義了帶符號(hào)的整型,因此最高位的bit表示正負(fù)符號(hào),0表示正數(shù),1表示負(fù)數(shù),如:
● 1(十進(jìn)制) = 0000 0001(二進(jìn)制);
● 127(十進(jìn)制) = 0111 1111(二進(jìn)制);
● -128(十進(jìn)制) = 1000 0000(二進(jìn)制)
關(guān)于二進(jìn)制及進(jìn)制間的轉(zhuǎn)換、原碼、反碼、補(bǔ)碼等內(nèi)容,壹哥會(huì)在后面再單獨(dú)講解!
3. 浮點(diǎn)型
浮點(diǎn)數(shù)可表示的范圍非常大,float類型可最大表示3.4x1038,而double類型可最大表示1.79x10308。
3.1 float
float 是單精度的浮點(diǎn)類型,占32位,是符合IEEE 754標(biāo)準(zhǔn)的浮點(diǎn)數(shù),具有如下特點(diǎn):
● float 在儲(chǔ)存大型浮點(diǎn)數(shù)組時(shí),可以節(jié)省內(nèi)存空間;
● 默認(rèn)值是 0.0f,"f"理論上不區(qū)分大小寫;
● float浮點(diǎn)數(shù)不能用來(lái)表示精確的值,如不能用float來(lái)表示貨幣等。
public class TypeDemo01 { public static void main(String[] args) { //定義float類型的變量,后面帶F或f float f = 10.2F; //float f = 3.14e38f; // 科學(xué)計(jì)數(shù)法表示的3.14x10^38 System.out.println(f); float f1 = 9999.9994f; System.out.println(f1); } }
3.2 double
double 是雙精度的浮點(diǎn)類型,占64 位,是符合 IEEE 754 標(biāo)準(zhǔn)的浮點(diǎn)數(shù),具有如下特點(diǎn):
● 浮點(diǎn)數(shù)的默認(rèn)類型為 double 類型;
● 默認(rèn)值是 0.0d,"d"理論上不區(qū)分大小寫;
● double類型同樣不能表示精確的值,如貨幣。
public class TypeDemo01 { public static void main(String[] args) { //定義double類型的變量,后面可以帶D或d,也可以不帶 double d = 10d; //double d = 4.9e-324; // 科學(xué)計(jì)數(shù)法表示的4.9x10^-324 System.out.println(d); double d1 = 12345678910111213.0; System.out.println(d1); } }
3.3 補(bǔ)充說(shuō)明
float和double的最小值和最大值都是以科學(xué)記數(shù)法的形式輸出的。結(jié)尾的"E+數(shù)字"表示E之前的數(shù)字要乘以10的多少次方。比如3.14E3就是3.14 × 103=3140,3.14E-3 就是 3.14 x 10-3 =0.00314。
4. 字符型
4.1 字符的特點(diǎn)
char是一種表示字符的類型。Java的char類型除了可以表示標(biāo)準(zhǔn)的ASCII,還可以表示一個(gè)Unicode字符,代表一個(gè)單一的16位 Unicode 字符,具有如下特點(diǎn):
● 最小值是 \u0000(十進(jìn)制等效值為 0);
● 最大值是 \uffff(即為 65535);
● char 數(shù)據(jù)類型可以儲(chǔ)存任何字符。
4.2 字符的三種表現(xiàn)形式
在java中,字符和字符串是兩種不同的數(shù)據(jù)類型。char類型使用單引號(hào)''表示,單引號(hào)里面只能有一個(gè)字符。字符串用雙引號(hào)""表示,雙引號(hào)中可以有很多字符。字符有三種表現(xiàn)形式:
1. 字符 'a' 、'中';
2. 數(shù)字 97、20;
3. 十六進(jìn)制 '\u0041'。
4.3 代碼案例
public class TypeDemo01 { public static void main(String[] args) { //定義字符型,字符帶有英文的'' char c1 = '中'; char c2 = 20013; char c3 = '\u0041'; //單引號(hào)中只能有一個(gè)字符! //char c4 = '中國(guó)'; System.out.println(c1);//中 System.out.println(c2);//中 System.out.println(c3);//A }}
大家要注意,單引號(hào)''中只能有一個(gè)字符,否則會(huì)出現(xiàn)如下錯(cuò)誤:”Invalid character constant“,無(wú)效的字符常量!
4.4 轉(zhuǎn)義字符
在上面的代碼案例中,我們可以看到有些字符的前面帶有反斜杠(\),這個(gè)反斜杠其實(shí)也是一個(gè)字符,它是一種轉(zhuǎn)義字符,對(duì)編譯器來(lái)說(shuō)有著特殊的含義。下表展示了Java中常用的幾個(gè)轉(zhuǎn)義字符含義:
5. 布爾型
boolean是布爾類型,該類型只表示一位信息,布爾類型是關(guān)系運(yùn)算的計(jì)算結(jié)果,具有如下特點(diǎn):
● 布爾類型只有兩個(gè)值:true 和 false;
● 默認(rèn)值是 false;
● 該類型一般是作為一種標(biāo)志,來(lái)記錄 true/false 的情況。
public class TypeDemo01 { public static void main(String[] args) { //boolean類型,真假(一般用條件判斷),true false //boolean flag = true; boolean flag = false; System.out.println(flag); int age = 12; boolean isAdult = age >= 18; // 計(jì)算結(jié)果為false System.out.println(isAdult); }}
6. 取值范圍
6.1 范圍對(duì)比
我們?cè)谥v解8種基本類型時(shí),大家會(huì)發(fā)現(xiàn),不同的類型大小不同,也就是它們有不同的取值范圍。接下來(lái)壹哥給大家總結(jié)一下這幾種不同類型的取值范圍。
6.2 原理剖析
有的初學(xué)者可能不理解,為什么不同數(shù)據(jù)類型的取值范圍大小不一樣?比如同樣都是整數(shù),為什么有的范圍大有的范圍小?壹哥簡(jiǎn)單給大家舉個(gè)例子。計(jì)算機(jī)的每個(gè)內(nèi)存單元,都有自己的內(nèi)存地址,一般都是從0開始編號(hào)。而每個(gè)內(nèi)存單元都可以看作是一個(gè)房間,房間有大有小,并且房間的類型不同,有的是大床房,有的是標(biāo)間,有的是總統(tǒng)套房。另外內(nèi)存地址就是房間的門牌號(hào),方便我們找到對(duì)應(yīng)的房間。
不同的數(shù)據(jù)類型之所以取值范圍不同,就好比每種類型都是不同的房型,有大有小,如下圖所示:
這些不同的類型,占用的字節(jié)大小不同,所以取值范圍自然也不一樣。
6.3 boolean類型補(bǔ)充說(shuō)明
在上面6.1小節(jié)中,關(guān)于boolean類型所占的字節(jié)大小,壹哥在表格中并沒有說(shuō)明。這是因?yàn)楦鶕?jù)官方文檔描述,boolean類型經(jīng)過(guò)編譯之后采用int來(lái)定義(所以此時(shí)boolean占4字節(jié),32bits),但如果是boolean數(shù)組則占1字節(jié)(8 bits)。詳見下圖紅色標(biāo)注:
7. 關(guān)于void
實(shí)際上,java中還有另外一種基本類型 void,它也有對(duì)應(yīng)的包裝類 java.lang.Void。但我們無(wú)法對(duì)它們直接進(jìn)行操作,所以一般不把它們當(dāng)做基本類型對(duì)待。
8. 包裝類型
雖然Java是面向?qū)ο蟮恼Z(yǔ)言,但為了方便我們開發(fā),在Java中繼續(xù)沿用了C語(yǔ)言的基本數(shù)據(jù)類型。我們?cè)谶M(jìn)行常規(guī)的數(shù)據(jù)計(jì)算時(shí),可以直接使用基本類型。但因?yàn)榛緮?shù)據(jù)類型不具備面向?qū)ο蟮男袨樘卣?,不能通過(guò)方法的形式進(jìn)行調(diào)用,且基本類型也不能存入到Java的集合中。所以后來(lái)Java提供了與基本類型對(duì)應(yīng)的8個(gè)包裝類,使其具有了對(duì)象的屬性和方法?;绢愋团c其對(duì)應(yīng)的包裝類如下表所示:
9.1 概念
所有的ASCII碼都可以用"\"加數(shù)字(一般是8進(jìn)制數(shù)字)來(lái)表示。Java中定義了一些字母前加"\"來(lái)表示特殊含義的字符,如\0、\t、\n等,這些都被稱為轉(zhuǎn)義字符(Escape Character),它們可以用來(lái)轉(zhuǎn)變某個(gè)字符原有的含義。
9.2 案例
大家要注意,我們?cè)陂_發(fā)時(shí)會(huì)用到兩種斜線,包括“/”和“\”。其中 “/” 斜線(slash)又稱為forward slash (前斜線),原本是一種標(biāo)點(diǎn)符號(hào)。“\”則是后斜線,在Java中作為轉(zhuǎn)義字符,常見的組合如下:
● \n:表示換行;
● \b:表示退格;
● \r:表示回車;
● \":表示雙引號(hào);
● \':表示單引號(hào);
● \\:表示反斜線;
● \':表示單引號(hào);
● \t:表示tab制表;
● \f:表示走紙換頁(yè);
public class TypeDemo01 { public static void main(String[] args) { //常見轉(zhuǎn)義字符:\n 表示換行;\t表示制表位 //轉(zhuǎn)義字符:\t,可以空4格;\n,可以換下一行; System.out.println("hello\tworld"); System.out.println("hello\nworld"); //轉(zhuǎn)義字符,\"",輸出中文的“” System.out.println("你\"真棒\""); //轉(zhuǎn)義字符:默認(rèn)情況下,斜杠是不能單獨(dú)輸出使用的,需要加一個(gè)轉(zhuǎn)義字符才能輸出。 System.out.println("D:\\a\\b"); }}
效果如下圖所示:
9.3 常用轉(zhuǎn)義字符
以下是一些常用的轉(zhuǎn)義字符供大家參考使用。
以上就是關(guān)于java數(shù)據(jù)類型的介紹,剛?cè)腴T的朋友一定要認(rèn)真學(xué)習(xí)哦!!!