1. 程式人生 > >基礎 | 基本資料型別與引用資料型別

基礎 | 基本資料型別與引用資料型別

Java資料型別應該算是最基礎的了,面試時問到的也不是特別多,在此也僅做一個簡單的梳理,大家簡單瀏覽即可。

建議重點關注Java中 「基本資料型別轉換」 的相關問題。


Java有哪些基本資料型別?

Java中的基本資料型別只有8個:byte(1位元組)、short(2位元組)、int(4位元組)、long(8位元組)、float(4位元組)、double(8位元組)、char(1位元組)、boolean。

對應的包裝類分別是:Byte、Short、Integer、Long、Float、Double、Character、Boolean。


String是基本資料型別嗎?

不是。除了以上8種基本資料型別,其餘的都是引用資料型別。

注意:Java5以後引入的列舉型別也算是一種比較特殊的引用資料型別。


基本資料型別之間是怎麼轉換的?

自動型別轉換: 容量小的型別自動轉換為容量大的資料型別,如下圖:

  • 多種型別的資料混合運算時,系統先自動將所有資料轉換成容量最大的那種資料型別,再進行計算。
  • 當把任何基本型別的值和字串值進行連線運算時(+),基本型別的值將自動轉化為字串型別。

強制型別轉換: 自動型別轉換的逆過程,將容量大的轉換為容量小的資料型別。

  • 使用時要加上強制轉換符“()”,但可能造成精度降低或溢位。
  • 字串不能直接轉換為基本型別,需要藉助基本型別對應的包裝類來實現。

型別轉換擴充套件題

問題1:float f=3.4;是否正確?

參考答案:不正確。3.4是雙精度數,將雙精度型(double)賦值給浮點型(float)屬於下轉型(down-casting,也稱為窄化)會造成精度損失,因此需要強制型別轉換float f =(float)3.4; 或者寫成float f =3.4F;

問題2:short s1 = 1; s1 = s1 + 1;有錯嗎?short s1 = 1; s1 += 1;有錯嗎?

參考答案:對於short s1 = 1; s1 = s1 + 1;由於1是int型別,因此s1+1運算結果也是int 型,需要強制轉換型別才能賦值給short型。而short s1 = 1; s1 += 1;可以正確編譯,因為s1+= 1;相當於s1 = (short)(s1 + 1);其中有隱含的強制型別轉換。


擴充套件程式碼閱讀

補充一個關於自動裝箱與拆箱的經典筆試題,好好思考一下吧。

class AutoUnboxingTest {

    public static void main(String[] args) {
        Integer a = new Integer(3); // 手動建立物件,不會引用常量池中的物件
        Integer b = 3; // 將3自動裝箱成Integer型別
        int c = 3;
        System.out.println(a == b); // false 兩個引用沒有引用同一物件
        System.out.println(a == c); // true a自動拆箱成int型別再和c比較(易錯)
        
        Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;

        System.out.println(f1 == f2); // true
        System.out.println(f3 == f4); // false
	    // 易錯:比較的是物件的引用;
	    // 自動裝箱時-128到127引用常量池中的物件,否則新建物件

    }
}


推薦閱讀


歡迎關注

Java名企面試吧,每天10點24分,我們不見不散!

丙子先生的宗旨是,每天以短篇幅講高頻面試題,不增加太多負擔,但需要持之以恆。

能力有限,歡迎指教!