Java重溫學習筆記一,基本資料型別
阿新 • • 發佈:2021-06-18
一、 float/double型別對字尾大小寫不敏感。如:
float f1 = 234.5f; float f2 = 234.5F;
效果等同。
double d1 = 7.; double d2 = 7.d; double d3 = 7.0D;
效果等同。
二、long型別,如果賦值時資料過大,必須加字尾L(建議養成習慣)。不加字尾預設按整型處理,易報錯。
如:
long g1 = 9223372036854775807; long g2 = (long)9223372036854775807;
編譯時都會報錯:錯誤: 過大的整數: 9223372036854775807
正確方式為:
longg1 = 9223372036854775807L; long g2 = 9223372036854775807l;
三、IntegerCache快取的問題
public static void main(String[] myarg) { Integer i1 = 5678; Integer i2 = 5678; System.out.println(i1==i2); Integer i3 = 101; Integer i4 = 101; System.out.println(i3==i4); }
上面這段程式碼的輸出是:
false
true
原因參考IntegerCache類的實現程式碼:
public static Integer valueOf(int i) { assert IntegerCache.high >= 127; if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
從上面可以看出,i >= -128 && i <= 127 時,Integer.valueOf(i) 會將 i 儲存在內部類 IntegerCache的static final Integer cache[]裡,這一位元組的快取記憶體地址是靜態的。
四、char與byte的區別
byte 是位元組資料型別,是有符號型的,佔1 個位元組,大小範圍為:-128—127 。char 是字元資料型別 是無符號型的,佔2位元組(Unicode碼 ),大小範圍 為:0—65535。char是一個16位二進位制的Unicode字元,Java用char來表示一個字元 。
public static void main(String[] myarg) { char c1 = (char) -9; // char不能識別負數,必須強制轉換,否則報錯。 System.out.println(c1); // 注意:即使強制轉換之後,也無法識別,顯示為?號。 char c2 = 'B'; char c3 = '民'; byte b1 = (byte)c2; // 必須強制轉換否則報錯 byte b2 = (byte)c3; // 必須強制轉換否則報錯 System.out.println(b1); System.out.println(b2); }
順帶補充八種基本資料型別的基本知識:
byte 資料型別是8位、有符號的,以二進位制補碼錶示的整數;
short 資料型別是 16 位、有符號的以二進位制補碼錶示的整數
int 資料型別是32位、有符號的以二進位制補碼錶示的整數;
long 資料型別是 64 位、有符號的以二進位制補碼錶示的整數;
float 資料型別是單精度、32位、符合IEEE 754標準的浮點數;
double 資料型別是雙精度、64 位、符合IEEE 754標準的浮點數;
boolean資料型別表示一位的資訊;
char型別是一個單一的 16 位 Unicode 字元;