基于第一个值的Java三元运算符数据类型转换?

Nav*_*mar 5 java operators

我偶然发现过这件事.

这是一个正常的表达方式

    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)

我对这个编译错误很困惑.这背后究竟是什么?谢谢你的解释

Tom*_*ine 2

的类型

(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<?>,则字符串连接或算术都不适用,因此会出现编译器错误。