声明:本文转载至颜群老师微信公众号:https://mp.weixin.qq.com/s/NxeCQ2b8VeosGctak1BUsg
请说出以下程序的运行结果
public static void main(String[] args) {
int n1 = 1;
int 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<String, Integer>();
System.out.println(map == null ? 0 : map.get(""));
}
---------------------------------------华丽的分割线-------------------------------------------------
执行结果
200.0
B
666666
2
65
Exception in thread "main" java.lang.NullPointerException
解析
本题的考点是: 三目运算符的类型 转换问题 问题。
boolean ? 表达式1 : 表达式2
1、 三目运算符中,当"表达式1"与表达式2的类型不一致,则运算符结果的类型就是提升后的类型(即进行自动类型转换后的结果)。对应本题中n1 == n2 ? 100.0 : 200
;
2、对于"整数问题",这里的整数是指"short,byte,char,int"。如果"表达式1"是"short,byte,char",“表达式2"是"int”,则分为以下两种情况:
- 表达式2是int常量:
如果“表达式2”在表达式1(short,byte,char)的数据范围内,则能够转为表达式1的类型,对应本题中的n1 == n2 ? 'A' : 66
,如果“表达式2”不在表达式1(short,byte,char)的数据范围内,则保持不变。对应题中的n1 == n2 ? 'A' : 6666666
。 - 表达式2是变量
统一进行自动类型提升,对应本题中的n1 == n2 ? 'A' : n2