【发布时间】:2017-01-20 08:11:27
【问题描述】:
我遇到了这段代码,我很困惑为什么三元运算符会这样,(我在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,那么为什么 @ 987654326@ 不符合字面值?
其次,即使b3有解释,为什么b4不用在表达式的else部分强制转换也可以?
我举了其他一些短数据类型的例子,它具有相同的行为。
谢谢
【问题讨论】:
-
虽然不是精确复制,但请参阅stackoverflow.com/questions/12332574
-
两者都不重复!我不会在这里讨论自动装箱。
-
规范说明了整个故事。
标签: java ternary-operator