我偶然发现过这件事.
这是一个正常的表达方式
int a = 5;
System.out.println(((a < 5) ? 0 : 9));
Run Code Online (Sandbox Code Playgroud)
所以这只是打印9作为int.现在如果我把第一个值而不是int 0
int a = 5;
System.out.println(((a < 5) ? "asd" : 9));
Run Code Online (Sandbox Code Playgroud)
这里值9打印为字符串而不是int.要确认这一点,只需尝试使用另一个整数添加它
int a = 5;
System.out.println((((a < 5) ? 0 : 9) + 4) );
Run Code Online (Sandbox Code Playgroud)
现在这导致13,但是如果将第一个值更改为字符串而不是int 0,则会产生编译错误
"The operator + is undefined for the argument type(s) Object&Serializable&Comparable<?>, int".
Run Code Online (Sandbox Code Playgroud)
我对这个编译错误很困惑.这背后究竟是什么?谢谢你的解释
的类型
(a < 5) ? "asd" : 9
Run Code Online (Sandbox Code Playgroud)
是
Object&Serializable&Comparable<?>
Run Code Online (Sandbox Code Playgroud)
您可以在问题后面的编译器错误中看到这一点。int 9将 装箱,然后找到Integer和 之间的公共类型。String所以你实际上调用println(Object)重载 not println(String)or println(int)。println(Object)呼吁toString其论点。
如果您尝试应用于+a Object&Serializable&Comparable<?>,则字符串连接或算术都不适用,因此会出现编译器错误。
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |