【问题标题】:ternary operator and primitive types三元运算符和基本类型
【发布时间】: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 或其他更大的数据类型), - 就像 b1b2,那么为什么 @ 987654326@ 不符合字面值?

其次,即使b3有解释,为什么b4不用在表达式的else部分强制转换也可以?

我举了其他一些短数据类型的例子,它具有相同的行为。

谢谢

【问题讨论】:

标签: java ternary-operator


【解决方案1】:

三元运算符根据“if”和“else”值确定其返回类型。当它看到“4”作为“if”值时,它假定它正在返回一个 int 类型。如果将“4”转换为字节,则三元运算符知道它应该返回字节类型。

您不需要强制转换“else”值,因为三元运算符已经知道它的返回类型,并且“else”值适合该类型。

【讨论】:

  • 以及为什么我们在直接为 b1 赋值时不需要强制转换?三元运算符返回一个文字值。
【解决方案2】:

对于 b3,一个整数被分配给一个字节。拆箱和缩小原始转换,不要以一种隐式的方式并驾齐驱。

将 Integer 转换为 int,它将起作用,否则将 Integer 类型转换。

【讨论】:

    猜你喜欢
    • 2011-12-17
    • 1970-01-01
    • 2012-12-15
    • 2018-08-20
    • 2017-08-24
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    相关资源
    最近更新 更多