首页 > 编程知识 正文

三目运算符的运算规则,java数据类型转换运算

时间:2023-05-04 19:42:26 阅读:257793 作者:669

三目运算符结构:

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) ;//qrdss定义s 类型时 不管是String 还是Integer都会报错

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

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

 

 

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

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。