(二)資料型別(data type)
資料型別(data type)
資料型別分為基本資料型別和引用資料型別。
1、基本資料型別
8種基本資料型別。各個基本型別之間是平等的,不存在大小和父子類的關係。它們之間的大小隻是從儲存資料所佔用的空間來比較的。
1.數值型
1.在Java種,整數預設是int型別,小數預設為bouble型別。
2.如果一個整數超過了int的取值範圍,需要加上L/l作為結尾標識,表示是一個long型別的資料。
3.float型別的小數結尾必須以f作為標識。
4.注意科學計數法。
整數型
整數型有四種類型:byte、short、int、long。
byte
位元組型,佔1個位元組的空間,取值範圍:-2^7^- 2^7^-1,即-128- 127。一共256個儲存空間(要求記住)。
byte=127;
byte=-128;
short
短整型,佔2個位元組的空間,取值範圍:-2^15^ ~2^15^ -1,即-32768~32767,一共是65535個空間。
int
整型:佔4個位元組的空間,取值範圍:-2^31^ ~2^31^ -1,即: -2.1 * 10^10^ ~ 2.1 * 10^10^ 。
Java中,從JDK1.7開始,允許在數字之間插入“”作為間隔,在編譯的時候會自動省略 “ ”。
int i = 0x23;
int i = 0b0011;
int i = 100_000_000; //表示:100000000
long
長整型:佔8個位元組的空間,取值範圍:-2^63^ ~ 2^63^ -1,即:-9 * 10^18^ ~ 9 * 10^18^ 。要求以L、l作為結尾進行標識。
long l = 5L; //(大寫字尾)
long l = 5l; //(小寫字尾)
浮點型
float
單精度:佔4個位元組的空間,取值範圍:-2^127^ ~ 2^127^ ,即:-3.4 * 10^38^ ~ 3.4 * 10^38^ 。要求以F、f作為結尾進行標識。
float f = 3.2f;
double
雙精度:佔8個位元組的空間,取值範圍:21023~21023,即:-10308~10308。Java中小數預設為double型別。
//正確寫法
double d = 4.6;
double d2 = 6.3d;
double d3 = 3.8D;
double d =3e4;->double d = 30000.0;//十進位制的科學計數法的表現形式。
double d=3p2;//十六進位制的科學計數法的表示形式。
注意:Java種的數值型別都是有符號的。
2.字元型
char
位元組型:佔2個位元組的空間,取值範圍: 0 ~ 2^16^ -1 ,即:0 ~65535。不允許定義空字元。
char c = ‘a’;
char c = ‘中’;
char c = ‘’; //不允許定義空字元
char c=’\t’;
預設值:’ \ u0000 ’:表示’ ’。以 \u 開頭表示這個字元是他對應的UTF-8的編碼。
可以按照碼錶對應成數字。
編碼有以下格式:
阿斯科碼錶:ASCII,範圍:0 ~ 127,只有英文字元。
西歐碼錶:ISO8859-1,範圍:0 ~ 255。也是隻有英文字元。
GBK2312:向上相容西歐碼錶,前256位都只佔1個位元組,2個位元組表示一個漢字。
Unicode編碼體系:
UTF-8,收錄了常見語言的常見字元。3個位元組表示一個字元。又叫萬國碼表。
Java的預設編碼是UTF-8。
所有的碼錶都是相容西歐碼錶的,所以前256位全都只佔1個位元組。
轉義字元
\’ 單引號 \ 反斜槓 \” 雙引號 \t 製表符 \r-return回車符 \n—newLine 換行符。
從JDK1.7開始,\r和\n的功能一致。
3.布林型(boolean)
取值只有true和false,大小沒做限定,根據作業系統和JDK的版本不同而定。預設取值為false。
在老師講課的過程種,只說了8種基本資料型別,但是我在網上看到好多題目問9種基本型別是什麼。我查了一下,就是將void規劃到了基本型別,void也有相對應的包裝類。其他具體的資訊就沒有找到了,有的大神可以發給我,謝謝了!
2、引用資料型別
引用資料型別中有類(class)、介面(interface)、陣列、原生類Arrays,列舉(enum)。
這些在以後都會細細講到,在這裡就不做贅述了。
3、資料型別的轉換
1.隱式轉換
隱式轉換也叫自動型別轉換,故名思議,轉換髮生了,讓你沒有察覺,都是JVM在底層對資料做了轉換。基本上是可以概括為6個字:整轉小,小轉大。
規律一:小型別可以自動轉化為大型別。
float f = 4.2f
double d = f;
int i = 10;
float f = i;
規律二:整數可以自動的轉化為小數,可能會出現精度損失問題。
long l = 9L;
float f = l;
float f = -25;//true
float f = 25.0; //false
char c = ‘大’;
int i = c;
double = i;
規律三:char可以自動轉化為int。
char c = ‘大’;
int i = c;
long l = c;
double = i;
char c = 98;//true
short s= ’b’;//true
char c=’b’;
short s= c;//false因為兩句話是分開編譯的,所以範圍無法確定。
char c =-1;//編譯報錯
char c = 98; //可以
short s = ‘g’; //可以
char c = 98;
short s = c;
//在程式碼編譯期間,JVM會檢查資料的型別和宣告的類名是否一致或者相容。如果在賦值的時候資料是一個變數,不會去檢查這個變數的值而是檢查變數的型別和宣告的資料型別是否相容。
float f = 30; //true
float f = 30.0f;
long l = ‘中’; //true
long l = 100; //true---如果一個整數在int的取值範圍內,可以不用新增L作為結尾
2.顯示轉換
顯示轉換又叫強制型別轉換,就是資料轉換的時候需要我們自己手動操作,JVM不會幫你操作。
當把大型別的資料轉換為小型別的資料的時候,需要強制轉換。
當把浮點型資料轉換為整型變數的時候,需要強制型別的轉換。小數轉換成整數的時候,不是四捨五入,而是捨棄掉小數部分,因此,小數轉換整數的時候,也會產生精度損失。
int i = 10;
byte b = (byte)i;
double d = 3.99;
int i = (int)d; // 3 -> 小數在強制轉換為整數的時候會捨棄所有的小數位。
int i = 200;
byte b = (byte)i; //可以
注意:在計算機種,絕大部分小數是沒有辦法精確表示的。
最後,是我自己根據老師講課的內容畫的一張進位制轉換圖,僅供大家學習參考。