by shihang.mai
先說(shuō)結(jié)論:
當(dāng)使用三元表達(dá)式時(shí),?號(hào)后的兩個(gè)值表達(dá)式為一個(gè)整體當(dāng)兩個(gè)值表達(dá)式類(lèi)型不一致時(shí),編譯器會(huì)優(yōu)化語(yǔ)句- 所以到三元表達(dá)式兩個(gè)值表達(dá)式類(lèi)型不一致時(shí),慎用!
例子1
public static void main(String[] args) {
Integer valOne = 1;
Integer valTwo = 2;
Integer result = true?valOne:valTwo;
System.out.println(result);
}
得到反編譯結(jié)果

image.png
當(dāng)兩值類(lèi)型一致時(shí),且都不為null,沒(méi)任何問(wèn)題
例子2
public static void main(String[] args) {
Integer valOne = 1;
String valTwo = "2";
Integer result = true?valOne:Integer.parseInt(valTwo);
System.out.println(result);
}
得到反編譯結(jié)果

image.png
當(dāng)兩值類(lèi)型不一致,且都不為null,沒(méi)任務(wù)問(wèn)題
例子3
public static void main(String[] args) {
Integer valOne = 1;
String valTwo = "2";
Integer result = true?null:Integer.parseInt(valTwo);
System.out.println(result);
}
得到反編譯結(jié)果

image.png
當(dāng)兩值類(lèi)型不一致,其中一個(gè)值直接為null時(shí),都沒(méi)問(wèn)題
例子4
public static void main(String[] args) {
Integer valOne = null;
String valTwo = "2";
Integer result = true?valOne:Integer.parseInt(valTwo);
System.out.println(result);
}
得到反編譯結(jié)果

image.png
當(dāng)兩值類(lèi)型不一致,且一個(gè)值通過(guò)引用為null,就會(huì)有問(wèn)題可以看到反編譯結(jié)果,valOne.intValue(),會(huì)導(dǎo)致NPE異常