我遇到了这段代码,我很困惑为什么三元运算符会这样做,(我在stackoverflow上找不到完全相同的问题,所以请耐心等待)
看一下这段代码
public class TernaryOperatorTester{
public static void main(String []args){
Integer i1 = 8;
Integer i2 = 8;
byte b1 = 3; //OK
byte b2 = 5 + 4; //OK
byte b3 = i1 == i2 ? 4 : 8; //KO!
byte b4 = i1 == i2 ? (byte)4 : 8; //OK!!, else part do not need cast!
short s1 = i1 == i2 ? 4 : 8; //KO! similarly
short s2 = i1 == i2 ? (short)4 : 8;//OK!!,and again else part do not need cast!
}
}
首先,三元运算符返回的是文字值(表达式不是提升为int或其他更大的数据类型), - 就像b1
和b2
那么为什么b3
对字面值不合适呢?
第二,即使有b3
的解释,为什么b4
没有在表达式的else部分中进行强制转换?
我在短数据类型中添加了一些其他示例,它具有相同的行为。
感谢
答案 0 :(得分:0)
三元运算符根据" if"确定其返回类型。和"否则"值。当它看到" 4"作为"如果" value,它假定它返回一个int类型。如果" 4"作为一个字节,三元运算符知道它应该返回一个字节类型。
你不需要施放"否则"值因为三元运算符已经知道它的返回类型,并且" else"值符合类型。
答案 1 :(得分:0)
对于b3,正在为一个字节分配一个Integer。拆箱和缩小原始转换,不要以隐式方式进行交换。
将Integer转换为int,它将起作用或者输入Integer。