Java有八種基本數據類型,所謂基本類型就是說存儲時僅存在棧中,那么與之相對就是引用類型,引用類型既存在棧里又存在堆里,棧內存放堆內地址。
八種基本類型分別為byte short int long float double bool char ,在《Head First Java》中有一句話,叫做:注意!熊不該抓毛毛狗,Be Careful!Bears Shouldn't Ingest Large Furry Dogs。專門用於記憶這八種數據類型,每個單詞首字母都對應一種類型。不過我覺得還是分類記憶比較好,一共可以分成四類:整型,浮點型,字符型,邏輯型。
整型按長度排序:byte(-128~127),short(-2^15~2^15-1),int(-2^31~2^31-1),long(-2^63~2^63-1)。
浮點型:float(3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,同樣,e-45表示乘以10的負45次方))
double(1.797693e+308~ 4.9000000e-324)
字符型:char
邏輯型:bool
通常像float數據如不聲明的話都默認為double,因為double存儲范圍更大,精度更高,float數據一般要在數據后面接F,表示是float數據,二者轉換為int時都是向下取整。
Java中的基本類型不是面向對象的,它們只是純粹的數據,除了數值本身的信息之外,基本類型數據不帶有其他信息或者可操作方法。這在實際使用中存在很多不足,為了解決這個不足,引入了包裝器。分別是Boolean,Character,Double,Float,Long,Integer,Short,Byte八種,特別需要注意的是char的包裝器為Character,int的包裝器為Integer。
在現用版本中能夠自動拆箱和裝箱,就是說可以寫Integer a=1;int b=a;都是成立的,在裝箱過程中調用的為valueof(i)方法,當然還可以是用構造器,若是采用構造函數來初始化如Integer a=new Integer(1);此時會存入堆。如果不需要新的 Integer 實例,則通常應優先使用valueof方法,而不是構造方法 Integer(int),因為該方法有可能通過緩存經常請求的值而顯著提高空間和時間性能。需要注意如下代碼:
Double a=100.0; Double b=100.0; if(a==b) { System.out.println("true"); } else { System.out.println("false"); }
此時輸出為false,這是因為Double類的valueOf方法會采用與Integer類的valueOf方法不同的實現。很簡單:在某個范圍內的整型數值的個數是有限的,而浮點數卻不是。