有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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或其他更大数据类型的表达式),就像b1b2一样,那么为什么b3不能使用文本值呢

第二,即使对b3有解释,为什么b4在表达式的else部分不强制转换也可以

我举了另一个短数据类型的例子,它具有相同的行为

谢谢


共 (2) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

    对于b3,一个整数被分配给一个字节。取消装箱和缩小原语转换,不要以隐式方式并行不悖

    将整数转换为整数,它将起作用,否则键入强制转换整数