请说出以下程序的运行结果:
public static void main(String[] args) {
int n1 = 1, n2 = 2;
System.out.println(n1 == n2 ? 100.0 : 200);
System.out.println(n1 == n2 ? 'A' : 66);
System.out.println(n1 == n2 ? 'A' : 66666);
System.out.println(n1 == n2 ? 'A' : n2);
System.out.println(n1 != n2 ? 'A' : n2);
Map<String, Integer> map = new HashMap<>();
System.out.println(map == null ? 0 : map.get(""));
}
|
|
|
|
|
|
|
|
运行结果:
200.0
B
66666
2
65
NullPointerException
解析:
本题的考点是:三目运算符的类型转换问题。
boolean ? 表达式1:表达式2 ;
对于三目运算符,当“表达式1”和“表达式2”的类型不一致时,有以下几个原则。
-
三目运算符中,如果"表达式1"和"表达式2"的类型不一致,则运算符结果的类型就是提升后的类型(即进行自动类型转换后的结果)。对应本题中的n1 == n2 ? 100.0 : 200
-
对于“整数问题”,这里的整数是指“short,byte,char,int”。如果"表达式1"是short/byte/char,"表达式2是int,则分为以下两种情况:
(1)表达式2是int常量:
如果"表达式2"在表达式1(short,byte,char)的数据范围以内,能够转为表达式1的类型,则转为表达式1的类型;对应本题中的n1 == n2 ? 'A' : 66
(2)表达式2是int变量
统一进行自动类型提升,对应本题的n1 == n2 ? 'A' : n2和n1 != n2 ? 'A' : n2
-
"表达式1"和"表达式2"中一个是基本类型,另一个是对象类型,则统一转为基本类型,对应本题的map == null ? 0 : map.get(""),其中“表达式1”是基本类型,“表达式2”是引用类型。因此最终结果为基本类型(int),即把map.get("")转为基本类型,但map.get("")的值是null,null转int时会报空指针异常。
- 完 -