在 Java 中使用 if 与 ternary opertator 时的“错误”返回类型
2022-09-03 02:09:29
在以下类中,两个方法的返回类型与三元运算符的想法不一致:
return condition?a:b;
等效于
if(condition) {
return a;
} else{
return b;
}
第一个返回双精度,第二个返回多头:
public class IfTest {
public static Long longValue = 1l;
public static Double doubleValue = null;
public static void main(String[] args) {
System.out.println(getWithIf().getClass());// outpus Long
System.out.println(getWithQuestionMark().getClass());// outputs Double
}
public static Object getWithQuestionMark() {
return doubleValue == null ? longValue : doubleValue;
}
public static Object getWithIf() {
if (doubleValue == null) {
return longValue;
} else {
return doubleValue;
}
}
}
我可以想象这与编译器狭隘地转换返回类型有关,但是这种语言明智吗?这当然不是我所期望的。getWithQuestionMark()
任何见解最受欢迎!
编辑:下面有很好的答案。此外,@sakthisundar引用的以下问题探讨了三元运算符中发生的类型提升的另一个副作用:Java中的棘手三元运算符 - 自动装箱