java 三目运算符隐藏的类型转化问题

三目运算符结构:

expression1?expression2: expression3

expression1: 能够返回boolean结果的语句 可bian变量(boolean/Boolean,包装类Booean会被隐式转化为基本类型boolean)

expression2: expression1结果true时所取得结果

expression3:expression1结果为为false所取的结果

example:

int i = true ? 1 : 2; //expression1 为真 取 expression2的结果:1
Boolean flag = null;
        int i = flag ? 1 : 2; //flag是包装类 Boolean 类型 运行时会拆箱 调用Boolean的成员函数booleanValue 这个时候会抛异常

三目运算符装箱拆箱

如果是包装类的话 三目运算会自动地做拆箱之后,再进行运算,就像上面说的Boolean会自动拆箱一样。

使用包装类型的话,需要进行必要的判空处理,否则值类的值为null时拆箱会报错

Boolean b = Boolean.FALSE;
        Integer integer = 1;// 数字类型字面量赋值给包装类 实际上是调用 包装类的valueOf函数 此处相当于 Integer integer = Integer.valueOf(1)

        int i = b ? integer : 1;
        //运行时 实质上是 int i = b.booleanValue() ? integer.intValue() : 1;

跨类型转换

对于对象类型的三目运算符 ,expression2和expression3 返回的对象类型最好一致,否则你只能用一个超类来接收值才不会爆编译错误。

Object s = true ? "1" : new Integer(1) ;//当你定义s 类型时 不管是String 还是Integer都会报错

数字类型的话 ,会按照最大精度的类型进行隐式转换,并且在返回结果时 会返回基本类型 

double d = true ? 1 : 1.0;//最大精度的类型是double 当你用int 接收时会爆编译异常

 

 

double d = true ? new Integer(11) : new Double(1);//包装类拆箱 即调用对应的**value方法,然后进行升精度处理

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值