一.目標
1.常量的使用
2.變量的使用
3.類型轉(zhuǎn)換
二.知識點
1.常量
概述:在代碼的運行過程中,值不會發(fā)生改變的數(shù)據(jù)
分類:
a.整數(shù)類型:所有的整數(shù)
b.小數(shù)常量:所有帶小數(shù)點的 2.0
c.字符常量:帶單引號的,單引號中有且只有一個內(nèi)容
d.字符串常量:帶雙引號的
e.布爾常量: true false 當做條件判斷
f.空常量:null 代表不存在,不能直接使用
2.變量
概述:在代碼運行的過程中,值會隨著不同的情況而隨時發(fā)生改變的數(shù)據(jù)
| 數(shù)據(jù)類型 | 關(guān)鍵字 | 內(nèi)存占用 | 取值范圍 |
| :----------- | :------------- | :------- | :----------------------------------------------------------- |
| 字節(jié)型 | byte | 1個字節(jié) | -128 至 127 定義byte變量時超出范圍,廢了 |
| 短整型 | short | 2個字節(jié) | -32768 至 32767 |
| 整型 | int(默認) | 4個字節(jié) | -2^31^ 至 2^31^-1 正負21個億<br>-2147483648——2147483647 |
| 長整型 | long | 8個字節(jié) | -2^63^ 至 2^63^-1 19位數(shù)字<br>-9223372036854775808到9223372036854775807 |
| 單精度浮點數(shù) | float | 4個字節(jié) | 1.4013E-45 至 3.4028E+38 |
| 雙精度浮點數(shù) | double(默認) | 8個字節(jié) | 4.9E-324 至 1.7977E+308 |
| 字符型 | char | 2個字節(jié) | 0 至 2^16^-1 |
| 布爾類型 | boolean | 1個字節(jié) | true,false(可以做判斷條件使用) |
分類:
基本數(shù)據(jù)類型:4類8種
整型:byte short int long
浮點型:float double
字符型:char
布爾型:boolean
引用數(shù)據(jù)類型:類 枚舉 接口 數(shù)組 注解
注意點:
a.整數(shù)默認類型為int
b.小數(shù)默認類型為double
c.字符串不屬于基本數(shù)據(jù)類型,屬于引用數(shù)據(jù)類型,String是一個類,只不過用的時候定義可以按照基本數(shù)據(jù)類型的格式定義
3.數(shù)據(jù)類型轉(zhuǎn)換
1.什么時候發(fā)生:
a.當?shù)忍栕笥覂蛇叢灰恢碌臅r候
b.小的數(shù)據(jù)類型與大的數(shù)據(jù)類型做運算
2.分類
自動類型轉(zhuǎn)換:
a.將取值范圍小的數(shù)據(jù)類型賦值給取值范圍大的數(shù)據(jù)類型 --> 小自動轉(zhuǎn)大
b.取值范圍小的數(shù)據(jù)類型和取值范圍大的數(shù)據(jù)類型數(shù)據(jù)做運算 -->小自動轉(zhuǎn)大
強制類型轉(zhuǎn)換:
當取值范圍大的數(shù)據(jù)類型數(shù)據(jù)賦值給取值范圍小的數(shù)據(jù)類型 -->需要強轉(zhuǎn) 比如 把long賦值給int
3.基本數(shù)據(jù)類型取值范圍大小排序
byte,short,char - > int - > long - > float - >double
強轉(zhuǎn)的注意事項:
1.不要隨意寫成強轉(zhuǎn)的格式,因為會有`精度損失`,`數(shù)據(jù)溢出`現(xiàn)象
2.byte,short定義的時候如果等號右邊是整數(shù)常量,如果不超出byte和short的范圍,不需要我們自己強轉(zhuǎn),jvm自動轉(zhuǎn)型 ; byte,short如果等號右邊有變量參與,byte和short自動提升為int,然后結(jié)果再次賦值給byte或者short的變量,需要我們自己手動強轉(zhuǎn)
3.char類型數(shù)據(jù)如果參與運算,會自動提升為int型,如果char類型的字符提升為int型會去ASCII碼表(美國標準交換代碼)范圍內(nèi)去查詢字符對應(yīng)的int值,如果在ASCII碼表范圍內(nèi)沒有對應(yīng)的int值,回去unicode碼表(萬國碼)中找
舉例:
//精度損失
int i = (int)2.9;
System.out.println(i);
/*
數(shù)據(jù)溢出
int型占內(nèi)存4個字節(jié),4個字節(jié)變成二進制是32位
100個億: 10 0101 0100 0000 1011 1110 0100 0000 0000 -> 34位二進制
100個億的二進制位比int型的二進制位多出來2位,此時干掉最前面的2位
101 0100 0000 1011 1110 0100 0000 0000
101 0100 0000 1011 1110 0100 0000 0000->1410065408
*/
有可能的面試題:
1.8>>>32位 -> 相當于沒有移動還是8
2.8>>>34位 -> 相當于往右移動2位