Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于第一个值的Java三元运算符数据类型转换?_Java_Operators - Fatal编程技术网

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

基于第一个值的Java三元运算符数据类型转换?,java,operators,Java,Operators,我遇到了一件我以前没有注意到的事情 这是一个正常的表达式 int a = 5; System.out.println(((a < 5) ? 0 : 9)); inta=5; 系统输出println(((a

我遇到了一件我以前没有注意到的事情

这是一个正常的表达式

    int a = 5;
                  System.out.println(((a < 5) ? 0 : 9));
inta=5;
系统输出println(((a<5)?0:9));
所以这只是将9打印为int。现在如果我将第一个值字符串而不是int 0

    int a = 5;
                  System.out.println(((a < 5) ? "asd" : 9));
inta=5;
系统输出println(((a<5)?“asd”:9));
这里,值9被打印为字符串,而不是int。要确认这一点,请尝试将其与另一个整数相加

 int a = 5;
             System.out.println((((a < 5) ? 0 : 9) + 4)           );
inta=5;
系统输出println(((a<5)?0:9)+4);
现在结果是13,但如果将第一个值改为string而不是int 0,则会出现编译错误

"The operator + is undefined for the argument type(s) Object&Serializable&Comparable<?>, int". 
“参数类型对象&Serializable&compariable,int的运算符+未定义”。

我对这个编译错误感到困惑。这背后究竟是什么?感谢解释表达式的类型
(a<5)?“asd”:9取决于第二个和第三个操作数的类型-“asd”和9。这两个操作数的唯一常见类型是
对象
(如果
int
被装箱为
整数

因此表达式的类型是
Object
,Java没有接受
Object
int
作为操作数的
+
运算符。因此出现了编译错误

System.out.println(((a<5)?0:9)+4);
三元条件表达式的类型为
int
,而
int
int
+
运算符的可接受操作数。

(a < 5) ? "asd" : 9
(a<5)?“自闭症”:9

对象、可序列化和可比较
您可以在问题后面的编译器错误中看到这一点。将
int
9
装箱为
Integer
,然后找到该字符串与
字符串之间的通用类型。因此,实际上您正在调用
println(Object)
重载,而不是
println(String)
println(int)
println(Object)
对其参数调用
toString


如果您试图将
+
应用于
对象&可序列化和可比较的
,则字符串串联或算术都不适用,因此编译器错误。

这一点已详细说明,绝对不值得在此重复。TL;DR:条件运算符的结果是第二个和第三个操作数的最小上界。我不知道这一点,因此感到困惑,无论如何,感谢您的澄清。如果您认为这一点令人困惑,请尝试找出
Object result=true的类型?整数.valueOf(0):双精度.valueOf(0)
(a < 5) ? "asd" : 9
Object&Serializable&Comparable<?>