加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 01:09:50 所属栏目:Java 来源:网络整理
导读:我偶然发现过这件事. 这是一个正常的表达方式 int a = 5; System.out.println(((a 所以这只是打印9作为int.现在如果我把第一个值而不是int 0 int a = 5; System.out.println(((a 这里值9打印为字符串而不是int.要确认这一点,只需尝试使用另一个整数添加它 in

我偶然发现过这件事.

这是一个正常的表达方式

    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<?>然后字符串连接或算术都不适用,因此编译器错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读