三目不同類型混合總結
整型與浮點數據類型混合
整型直接向浮點看齊
基本數據類型byte char short int long之間混合
1、數據類型是否相同,相同返回類型確定
2、數據類型不同,看編譯期能否識別兩個類型大小範圍
3、不能識別則取最大類型
4、能識別 看兩個類型範圍,大朝小看
5、範圍超,取大類型,否則取小
非全是基本數據類型
1、xx? int : Object;找最大父類--Object
2、xx? int : Integer;Integer拆箱成int
總結:三目運算涉及基本數據類型和包裝類時,會默認以基本數據類型爲標準輸出,拆箱。涉及基本數據和非包裝類對象引用時,會以最大父類Object爲輸出。System.out.println(map == null ? 1L: map.get("a"));//涉及基本類型和引用~不同類型找最大父類Object,相同類型拆箱
直接附代碼:
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
test(2, 3);
// 三目不同類型混合總結:
// 整型直接向浮點看齊
// 基本數據類型byte char short int long:
// 1、數據類型是否相同,相同返回類型確定
// 2、數據類型不同,看編譯期能否識別兩個類型大小範圍
// 3、不能識別則取最大類型
// 4、能識別 看兩個類型範圍,大朝小看
// 5、範圍超,取大類型,否則取小
// 非全是基本數據類型:
// 1、xx? int : Object;找最大父類--Object
// 2、xx? int : Integer;Integer拆箱成int
// 總結:三目運算涉及基本數據類型和包裝類時,會默認以基本數據類型爲標準輸出,拆箱。
// 涉及基本數據和非包裝類對象引用時,會以最大父類Object爲輸出
// System.out.println(map == null ? 1L: map.get("a"));//涉及基本類型和引用~不同類型找最大父類Object,相同類型拆箱
}
public static void test(int i, int i2) {
System.out.println(i == i2 ? 9.9 : 9);//輸出9.0 整型和浮點型,直接向浮點數看齊
System.out.println(i == i2 ? 'a' : 98);//輸出b 編譯器可以識別類型大小範圍,因爲98在char範圍內,向char看齊將98轉爲b
System.out.println(i == i2 ? 'a' : Integer.MAX_VALUE);//輸出2147483647 超過了char範圍,向大類型int看齊
System.out.println(i != i2 ? 'a' : i);//輸出97 不能識別類型大小範圍,直接向大類型int看齊
//不同類型,1L : Object 輸出null
Map<String,Object> map2 = new HashMap<>();
map2.put("b", 1L);
System.out.println(map2 == null ? 1L : map2.get("a"));
//相同類型,1L : map.get 輸出報錯 null轉爲Long異常
Map<String,Long> map = new HashMap<>();
map.put("b", 1L);
System.out.println(map == null ? 1L : map.get("a"));
}
}
運行結果: