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

原文链接: http://blog.sina.com.cn/s/blog_6810dfc20101j7op.html

三目运算符<表达式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

 

转载:http://blog.sina.com.cn/s/blog_6810dfc20101j7op.html

猜你喜欢

转载自blog.csdn.net/Certain_/article/details/99644672
今日推荐