当前位置 博文首页 > 程序员A的博客:Java进行三目运算时的自动类型转换
今天看到两个面试题,居然都做错了。通过这两个面试题,也加深对三目运算是的自动类型转换的理解。
题目1.以下代码输出结果是()。
public class Test {
public static void main(String[] args) {
int a=5;
System.out.println("value is :"+((a<5)?10.9:9));?
}
}
A.编译错误 ? ? B.10.9 ? ? ? ? ? C.9 ? ? ? ? ? D.以上答案都不对
我不假思索的就选了C,认为这题目也太简单了吧。而答案却是:D.以上答案都不对。原来我中了此题目的陷阱了。
解析:三目运算表达式(expression1 ? expression2 : expression3),即本题中的表达式:((a<5)?10.9:9),第二个表达式为10.9,第三个表达式为9。这是Java会根据运算符的精度进行自动类型转换。由于10.9的原因,9也会自动变成9.0。因此此题的真正输出为 9.0 。
题目2.以下代码的输出结果是()。
A.编译错误 ? ? B.10.9 ? ? ? ? ? C.9 ? ? ? ? ? D.以上答案都不对
我不假思索的就选了C,认为这题目也太简单了吧。而答案却是:D.以上答案都不对。原来我中了此题目的陷阱了。
解析:三目运算表达式(expression1 ? expression2 : expression3),即本题中的表达式:((a<5)?10.9:9),第二个表达式为10.9,第三个表达式为9。这是Java会根据运算符的精度进行自动类型转换。由于10.9的原因,9也会自动变成9.0。因此此题的真正输出为 9.0 。
题目2.以下代码的输出结果是()。
A.编译错误 ? ? B.10.9 ? ? ? ? ? C.9 ? ? ? ? ? D.以上答案都不对
我不假思索的就选了C,认为这题目也太简单了吧。而答案却是:D.以上答案都不对。原来我中了此题目的陷阱了。
解析:三目运算表达式(expression1 ? expression2 : expression3),即本题中的表达式:((a<5)?10.9:9),第二个表达式为10.9,第三个表达式为9。这是Java会根据运算符的精度进行自动类型转换。由于10.9的原因,9也会自动变成9.0。因此此题的真正输出为 9.0 。
题目2.以下代码的输出结果是()。
答案为:A.120 ?x。
解析:
int i=10;中的i是一个变量,因此,第一个输出x被提升为int型,x的int值为120,所以第一个输出为120。
至于第二个输出,Java编程规范中提到:当后两个表达式有一个是常量表达式时,另外一个类型是T时,而常量表达式可以被T表示时,输出结果是T类型。所以,因为10是常量,可以被char表示。输出结果是char型,所以输出为x。
System.out.println(true?100:x); ? 这句的输出结果为:d。因为d是100对应的char值。