三目运算符test

来源:互联网 发布:java 迭代器 从头 编辑:程序博客网 时间:2024/05/24 06:35
    // 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);

    }


小结

三目运算符的类型转换存在向下转型的情况,而且对象引用遇到基本类型会自动拆箱
所以在使用时,注意不同数据类型间的转换情况

0 0
原创粉丝点击