【发布时间】:2019-01-01 14:03:25
【问题描述】:
我遇到了这个我以前没有注意到的东西。
这是一个正常的表达方式
int a = 5;
System.out.println(((a < 5) ? 0 : 9));
所以这只是将 9 打印为 int。现在如果我把第一个值 String 而不是 int 0
int a = 5;
System.out.println(((a < 5) ? "asd" : 9));
这里的值 9 打印为字符串而不是 int。要确认这一点,只需尝试将其与另一个整数相加
int a = 5;
System.out.println((((a < 5) ? 0 : 9) + 4) );
现在结果为 13,但如果将第一个值更改为 string 而不是 int 0,则会出现编译错误
"The operator + is undefined for the argument type(s) Object&Serializable&Comparable<?>, int".
我对这个编译错误感到困惑。这背后究竟是什么?谢谢解释
【问题讨论】:
-
这是完整描述的in the language spec,绝对不值得在这里复制。 TL;DR:条件运算符的结果是第二个和第三个操作数的最小上限。
-
我不知道这个所以很困惑,无论如何感谢您的澄清。
-
如果您认为这令人困惑,请尝试找出
Object result = true ? Integer.valueOf(0) : Double.valueOf(0);的类型。