面試遇到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類型,不用強轉
}