// 3目运算符
// byte char short int long float double boolean
// java默认的整形int,默认的浮点型double
// 一般自动转换顺序 小-->大 char-int-long-double int-float
private static void threeOp() {
// 基本类型转换
System.out.println(1 == 2 ? 'A' : 66); //B int->char 可能造成乱码
System.out.println(1 == 2 ? 'A' : Short.MAX_VALUE+1d);//32768.0 short->double
System.out.println(1 == 1 ? 'A' : 66d);//65.0 char->double
System.out.println(1 == 1 ? 'A' : 66l);//65 char->long
System.out.println(1 == 2 ? 'A' : Long.MAX_VALUE);// long-long
System.out.println(1 == 1 ? 'A': 3.0f); // char-float
System.out.println(1 == 2 ? 'A': false); //互不影响
System.out.println(1 == 2 ? Short.MAX_VALUE: Short.MAX_VALUE+1); //short->int
System.out.println(1 == 2 ? Integer.MAX_VALUE: Integer.MAX_VALUE+1L);//int->long
System.out.println(1 == 1 ? 33d: 22.0f); //short-float
System.out.println(1 == 1 ? 33: 22.0f); //int-float
System.out.println(1 == 1 ? Long.MAX_VALUE: 22.0f);//9.223372E18 long-float,可能数据丢失
// System.out.println(Long.MAX_VALUE-9.223372E18);//大于0
System.out.println(1 == 1 ? Long.MAX_VALUE: 22.0);// long-double
//对象类型自动拆箱为基本类型
Map<String,Boolean> map = new HashMap<String, Boolean>();
map.put("1", false);
Boolean b = (map!=null ? map.get("test") : false); //空指针异常
//反编译
// Boolean b = Boolean.valueOf((map != null) ? ((Boolean)map.get("test")).booleanValue() : false);
//原因在与map.get("test")得到null。null再引用booleanValue于是异常
//解决
// Boolean b = (map!=null ? map.get("test") : Boolean.FALSE);
// byte char short int long float double boolean
// java默认的整形int,默认的浮点型double
// 一般自动转换顺序 小-->大 char-int-long-double int-float
private static void threeOp() {
// 基本类型转换
System.out.println(1 == 2 ? 'A' : 66); //B int->char 可能造成乱码
System.out.println(1 == 2 ? 'A' : Short.MAX_VALUE+1d);//32768.0 short->double
System.out.println(1 == 1 ? 'A' : 66d);//65.0 char->double
System.out.println(1 == 1 ? 'A' : 66l);//65 char->long
System.out.println(1 == 2 ? 'A' : Long.MAX_VALUE);// long-long
System.out.println(1 == 1 ? 'A': 3.0f); // char-float
System.out.println(1 == 2 ? 'A': false); //互不影响
System.out.println(1 == 2 ? Short.MAX_VALUE: Short.MAX_VALUE+1); //short->int
System.out.println(1 == 2 ? Integer.MAX_VALUE: Integer.MAX_VALUE+1L);//int->long
System.out.println(1 == 1 ? 33d: 22.0f); //short-float
System.out.println(1 == 1 ? 33: 22.0f); //int-float
System.out.println(1 == 1 ? Long.MAX_VALUE: 22.0f);//9.223372E18 long-float,可能数据丢失
// System.out.println(Long.MAX_VALUE-9.223372E18);//大于0
System.out.println(1 == 1 ? Long.MAX_VALUE: 22.0);// long-double
//对象类型自动拆箱为基本类型
Map<String,Boolean> map = new HashMap<String, Boolean>();
map.put("1", false);
Boolean b = (map!=null ? map.get("test") : false); //空指针异常
//反编译
// Boolean b = Boolean.valueOf((map != null) ? ((Boolean)map.get("test")).booleanValue() : false);
//原因在与map.get("test")得到null。null再引用booleanValue于是异常
//解决
// Boolean b = (map!=null ? map.get("test") : Boolean.FALSE);
}
小结
三目运算符的类型转换存在向下转型的情况,而且对象引用遇到基本类型会自动拆箱
所以在使用时,注意不同数据类型间的转换情况