Java三目运算符boolean?condition1:condition2的使用及类型转换

     三目运算符<表达式1>?<表达式2>:<表达式3>; "?"运算符的含义是: 先求表达式1的值, 如果为真, 则执行表达式2,并返回表达式2的结果 ; 如果表达式1的值为假, 则执行表达式3 ,并返回表达式3的结果.

       以上是三目运算符的基本定义与使用。表面上看来,应该是比较简单。在《Java程序员面试宝典》这本书里,我们见到了了两道比较有意思的题目。

题目1:【中国东北著名软件公司D2009年3月笔试题】

int a=5;
System.out.println("a="+((a<5)?10.9:9));

A. 编译错误

B. 10.9

C. 9

D. 以上答案都不对

也许和大多数人一样,刚开始想当然的以为a<5为false,那么结果就是9了,选C嘛!

仔细想想,这就是题目设置的陷阱。在表达式=(a<5)?10.9:9中有一个10.9,这是java就会根据运算符的精度进行自动类型的转换,由于前面是10.9,那么后面的9也就跟着变为9.0了!

 

题目2:【中国东北著名软件公司D2009年3月笔试题】

char x='x';
int i=10;
System.out.println(false?i:x);
System.out.println(false?100:x);

A. 120  x

B. 120 120

C. x 120

D. 以上答案都不对

答案为A

解析:System.out.println(false?i:x)与上个题目1相同,x被提升为int类型,所以输出x的ASCII码
而对于第二行,由于100是一个常量表达式。若三目运算符中的两个表达式有一个是常量表达式,另一个是类型T(本题中为char)的表达式,且常量表达式可以被T表示,则输出结果是T类型。因此输出是字符

 

核心思想:

1.若三目运算符中的两个表达式有一个是常量表达式,另一个是类型T的表达式,且常量表达式可以被T表示,则输出结果是T类型。

2.如果都是常量表达式,用向上类型转换

 

进入习题模式:

(1)

char x='x';
int i=10;、

System.out.println(false?10000:x);

系统输出:x

好的,如果修改一下呢

char x='x';
int i=10;、

System.out.println(false?100000:x);

系统输出是怎样呢?120!

解析:【核心思想1】10000可以被本题的T类型表示,所以输出结果为T类型,输出x;但是换成100000就不行了,因为它超过了ASCII码范围。那么就是就输出x的ASCII码值

 

继续延伸

char x='x';

System.out.println(true?100:x);

这个呢?

解析:同样适用【核心思想1】,true之后进入condition1.100可以被T类型表示,那么输入将是T类型(char 类型),100对应ASCII为d,那么输出d.

 

(2)

char x='x';

System.out.println(true?x:10);

System.out.println(true?x:10.0);

好的,第一行应该输出是x,这个没有问题。那么第二行呢?结果:120.0

解析:适用【核心思想1】,但是10.0不能被T类型,那么输出将不是T类型。120将升级为double类型变为120.0

 

(3)

System.out.println(fasle?9:10.0);

System.out.println(true?9:10.0);

结果:10.0 9.0

解析:适用【核心思想2】,第一行fasle的结果就是最高类型;第二行9将升级为double类型变为9.0


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值