一道三目运算符的题目

请说出以下程序的运行结果:

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. 三目运算符中,如果"表达式1"和"表达式2"的类型不一致,则运算符结果的类型就是提升后的类型(即进行自动类型转换后的结果)。对应本题中的n1 == n2 ? 100.0 : 200

  2. 对于“整数问题”,这里的整数是指“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

  3. "表达式1"和"表达式2"中一个是基本类型,另一个是对象类型,则统一转为基本类型,对应本题的map == null ? 0 : map.get(""),其中“表达式1”是基本类型,“表达式2”是引用类型。因此最终结果为基本类型(int),即把map.get("")转为基本类型,但map.get("")的值是null,null转int时会报空指针异常。

 

- 完 -

 

Java小白到大神的心路历程(Java SE)

Java小白到大神的心路历程(Web前端)
答疑 | 面试全对,却没offer?

"hello"+null = ?

读者交流 | JAVA过时了吗?

自己写的java.lang.String能用吗?

答疑 | synchronized有指令重排序的功能吗?

服了,list.add()也会报错!!!

一道JVM面试题,答错率超90%

10行代码2道题,全答对的你月薪多少了?

自己写的java.lang.String能用吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值