1. 以下代码输出结果是( D )。
public class Test {
public static void main(String[] args) {
int a=5;
System.out.println("values is "+((a < 5) ? 10.9 : 9 ) );
}
}
A. 编译错误 B. 10.9 C. 9 D. 以上答案都不对。
解析:如果你不假思索地直接选C,就恰恰中了题目设置的陷阱。注意到((a<5)? 10.9 : 9)里面有一个10.9,而后面直接跟了一个9。
这时候Java就会根据运算符的精度类型进行自动类型转换,由于前面有一个10.9,所以后面的9也会自动变成9.0,因此选择D
2. 以下代码的输出结果是( A )。
import java.util.*;
public class Test {
public static void main(String[] args) {
char x = 'x';
int i = 10;
System.out.println(false ? i : x);
System.out.println(false ? 10: x);
}
}
A. 120 x B.120 120 C. x 120 D. 以上答案都不对
解析:int i =10;中的i是一个变量,因此,第一个输出x被自动提升为int型了,因为i是int类型,x的int值为120,所以第一个输出为120
至于第2个输出,java编程规范中提到:当后两个表达式有一个是常量表达式(本题中是10)时,另外一个类型是T(本题中是char)时,而常量表达式可以被T表示是(representable in type T),输出结果是T类型。所以,因为10是常量,可以被char表示。输出结果是char型的。