三元运算符和原始类型

时间:2016-09-12 20:02:06

标签: java ternary-operator

我遇到了这段代码,我很困惑为什么三元运算符会这样做,(我在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或其他更大的数据类型), - 就像b1b2那么为什么b3对字面值不合适呢?

第二,即使有b3的解释,为什么b4没有在表达式的else部分中进行强制转换?

我在短数据类型中添加了一些其他示例,它具有相同的行为。

感谢

2 个答案:

答案 0 :(得分:0)

三元运算符根据" if"确定其返回类型。和"否则"值。当它看到" 4"作为"如果" value,它假定它返回一个int类型。如果" 4"作为一个字节,三元运算符知道它应该返回一个字节类型。

你不需要施放"否则"值因为三元运算符已经知道它的返回类型,并且" else"值符合类型。

答案 1 :(得分:0)

对于b3,正在为一个字节分配一个Integer。拆箱和缩小原始转换,不要以隐式方式进行交换。

将Integer转换为int,它将起作用或者输入Integer。