數據類型
【一】簡介
變量就是申請內存來存儲值。也就是說,當創建變量的時候,需要在內存中申請空間。
內存管理系統根據變量的類型爲變量分配存儲空間,分配的空間只能用來儲存該類型數據
Java 的兩大數據類型:
1、內置數據類型
2、引用數據類型
【二】java的8大基本數據類型
基本數據類型是CPU可以直接進行運算的類型。Java定義了以下幾種基本數據類型:
1、整數類型:byte,short,int,long
2、浮點數類型:float,double
3、字符類型:char
4、布爾類型:boolean
計算機內存的最小存儲單元是字節(byte),一個字節就是一個8位二進制數,即8個bit。它的二進制表示範圍從0000000011111111,換算成十進制是0255
ps:基本數據類型一般是在java虛擬機棧上進行分配的內存,一般是對應程序中的局部變量
【三】java的引用數據類型
- 在Java中,引用類型的變量非常類似於C/C++的指針。引用類型指向一個對象,指向對象的變量是引用變量。這些變量在聲明時被指定爲一個特定的類型,比如 Employee、Puppy 等。變量一旦聲明後,類型就不能被改變了。
- 對象、數組都是引用數據類型。
- 所有引用類型的默認值都是null
ps:對於引用變量一般是在java堆中進行分配的內存
【四】java常量
常量在程序運行時是不能被修改的。
在 Java 中使用 final 關鍵字來修飾常量,聲明方式和變量類似。
final double PI = 3.1415927;
ps:常量是分配在java方法區中的常量池中,是不允許進行修改值的
【五】類型轉換
-
整型、實型(常量)、字符型數據可以混合運算。運算中,不同類型的數據先轉化爲同一類型,然後進行運算。
-
轉換從低級到高級
1. 不能對boolean類型進行類型轉換。
2. 不能把對象類型轉換成不相關類的對象。
3. 在把容量大的類型轉換爲容量小的類型時必須使用強制類型轉換。
4. 轉換過程中可能導致溢出或損失精度
5. 浮點數到整數的轉換是通過捨棄小數得到,而不是四捨五入
自動類型轉換
滿足低位向高位轉換,比如:
byte b = 1;
int a = b;
對於低位是可以自動進行轉換爲高位
強制類型轉換
1、 條件是轉換的數據類型必須是兼容的
2、 高位轉低位
比如:
int a = 1;
byte b = (byte)a;
ps:在我們平時代碼的過程中,默認整數是int,浮點double
使用long的時候需要在後面加L
使用float的時候需要在後面加F
【六】面試題
- 1.1 short s1 = 1; s1 = s1 + 1;有什麼錯?
答:在s1+1運算時會自動提升表達式的類型爲int,那麼將int賦予給short類型的變量s1會出現類型轉換錯誤。
- 1.2 char類型變量能不能儲存一箇中文的漢子,爲什麼?
答:char類型變量是用來儲存Unicode編碼的字符的,unicode字符集包含了漢字,所以char類型當然可以存儲漢字的,還有一種特殊情況就是某個生僻字沒有包含在
- 1.3 Integer和int的區別
答:int是java的8種內置的原始數據類型。Java爲每個原始類型都提供了一個封裝類,Integer就是int的封裝類,int變量的默認值爲0,Integer變量的默認值爲null
- 1.4 能否在不進行強制轉換的情況下將一個 double 值賦值給 long 類型的變量?
答:不行,我們不能在沒有強制類型轉換的前提下將一個 double 值賦值給 long 類型的變量,因爲 double 類型的範圍比 long 類型更廣,所以必須要進行強制轉換。
- 1.5 java 中 3*0.1 == 0.3 將會返回什麼?true 還是 false?
答:false,因爲浮點數不能完全精確的表示出來,一般都會損失精度
- 1.6 java 中 float f = 3.4; 是否正確?
答:不正確,3.4 是雙精度數,將雙精度型(double)賦值給浮點型(float)屬於向下轉型(down-casting,也稱爲窄化)會造成精度損失,因此需要強制類型轉換 float f = (float)3.4; 或者寫成 float f = 3.4F; 纔可以。