java三元运算符和基元类型
我遇到了这段代码,我很困惑为什么三元运算符会这样(我在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部分不强制转换也可以
我举了另一个短数据类型的例子,它具有相同的行为
谢谢
# 1 楼答案
三元运算符根据“if”和“else”值确定其返回类型。当它将“4”视为“if”值时,它假定它返回的是int类型。如果将“4”转换为字节,则三值运算符知道它应该返回字节类型
您不需要强制转换“else”值,因为三元运算符已经知道其返回类型,“else”值适合该类型
# 2 楼答案
对于b3,一个整数被分配给一个字节。取消装箱和缩小原语转换,不要以隐式方式并行不悖
将整数转换为整数,它将起作用,否则键入强制转换整数