三元表达式踩坑

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异常

你可能感兴趣的:(三元表达式踩坑)