三元表达式踩坑

by shihang.mai

先说结论:

  1. 当使用三元表达式时,?号后的两个值表达式为一个整体
  2. 当两个值表达式类型不一致时,编译器会优化语句
  3. 所以到三元表达式两个值表达式类型不一致时,慎用!

例子1

public static void main(String[] args) {
        Integer valOne = 1;
        Integer valTwo = 2;
        Integer result = true?valOne:valTwo;
        System.out.println(result);
}

得到反编译结果


image.png

当两值类型一致时,且都不为null,没任何问题

例子2

public static void main(String[] args) {
        Integer valOne = 1;
        String valTwo = "2";
        Integer result = true?valOne:Integer.parseInt(valTwo);
        System.out.println(result);
    }

得到反编译结果

image.png

当两值类型不一致,且都不为null,没任务问题

例子3

public static void main(String[] args) {
        Integer valOne = 1;
        String valTwo = "2";
        Integer result = true?null:Integer.parseInt(valTwo);
        System.out.println(result);
    }

得到反编译结果

image.png

当两值类型不一致,其中一个值直接为null时,都没问题

例子4

public static void main(String[] args) {
        Integer valOne = null;
        String valTwo = "2";
        Integer result = true?valOne:Integer.parseInt(valTwo);
        System.out.println(result);
    }

得到反编译结果

image.png

当两值类型不一致,且一个值通过引用为null,就会有问题
可以看到反编译结果,valOne.intValue(),会导致NPE异常

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容