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

前端之家收集整理的这篇文章主要介绍了基于第一个值的Java三元运算符数据类型转换?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我偶然发现过这件事.

这是一个正常的表达方式

    int a = 5;
                  System.out.println(((a < 5) ? 0 : 9));

所以这只是打印9作为int.现在如果我把第一个值而不是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,但是如果将第一个值更改为字符串而不是int 0,则会产生编译错误

"The operator + is undefined for the argument type(s) Object&Serializable&Comparable

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

最佳答案
的类型

(a < 5) ? "asd" : 9

Object&Serializable&Comparable

您可以在问题的后面的编译器错误中看到这一点. int 9被装箱为Integer,然后找到它和String之间的公共类型.所以你实际上是在调用println(Object)重载而不是println(String)或println(int). println(Object)在其参数上调用toString.

如果您尝试应用于Object& Serializable& Comparable<?>然后字符串连接或算术都不适用,因此编译器错误.

猜你在找的Java相关文章