by shihang.mai
先说结论:
当使用三元表达式时,?号后的两个值表达式为一个整体
当两个值表达式类型不一致时,编译器会优化语句
- 所以到三元表达式两个值表达式类型不一致时,慎用!
例子1
public static void main(String[] args) {
Integer valOne = 1;
Integer valTwo = 2;
Integer result = true?valOne:valTwo;
System.out.println(result);
}
得到反编译结果
当两值类型一致时,且都不为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);
}
得到反编译结果
当两值类型不一致,且都不为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);
}
得到反编译结果
当两值类型不一致,其中一个值直接为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);
}
得到反编译结果
当两值类型不一致,且一个值通过引用为null,就会有问题
可以看到反编译结果,valOne.intValue(),会导致NPE异常