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