Java基本數據(short和int的轉換問題)

面試遇到short和int的轉換問題,當時有些疑惑,在這裏總結一下!

第一種情況

public static void main(String[] args) {
        short a = 1;
        a += 1;                 //不用強轉
        a = (short) (a + 1);   //需要強轉, 
    }

       可能大家會比較迷惑,爲什麼兩種操作都是+1,但一個需要強轉一個不需要?

a += 1 :因爲在Java規範中,複合賦值是自帶了隱式的強制類型轉換的。
a = a+1 : 因爲先執行的是a+1,會先將a強轉爲int,之後將int賦值給short就會出現編譯錯誤

第二種情況

public static void main(String[] args) {
        int a = 1;
        int b = 2;
        short c = (short) (a+b);  //int直接賦值給short時需要強轉操作
    }

第三種情況

public static void main(String[] args) {
        short a = 1;
        short b = 2;
        short c = (short) (a + b);   //兩個short做運算後再進行賦值的話,也需要強轉;
    }

因爲在做運算操作時,編譯器會自動將比int精度小的類型轉換爲int進行操作,所以運算之後是int類型,需要強轉;

第四種情況

public static void main(String[] args) {
        short a = 1;
        short b = 2;
        int c = a + b;    //兩個short做運算操作會轉成int類型來操作,所以這裏的short不需要強轉;
    }

第五種情況

public static void main(String[] args) {
        short a3 = 1;
        int c3 = a3;   //short可以直接賦值給int類型,不用強轉
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章