三目表达式隐式转换

96 阅读1分钟

前言


三目表达式深入理解,三目表达式局限性比较大,适用于单一业务,更加推荐 if-else等结构分明类语句, 使用三目表达式时,需要注意以下几点:

  • 三目表达式的条件必须是布尔表达式。
  • 三目表达式的第二目和第三目必须返回相同类型的表达式。
  • 三目表达式嵌套使用时,要注意括号的匹配。

两种类型转换模式

第一种转换

@Test
public void testMet1()
{
    System.out.println(true ? 'a' : 65536); // 结果为 a
    System.out.println(true ? 'a' : 65537); // 结果为97
    System.out.println(true ? 'a' : -1); // 无符号整数没有负数,因此为转换数值
}

小型范围类型会向大型范围类型进行扩展转换,第一行代码的65535会被自动当成 short/byte 类型,因此不会转为数值类型。
short类型的最大值是32767,也就是2^15次方当做原码处理,但此时short类型会当做无符号整数进行处理,也就是65536。 在第二个输出语句中, 65537 数自动转为int类型。

第二种转换

@Test
public void testMet2()
{
    System.out.println(true ? 1 : 1.0); // 结果为 1.0 (double)
    System.out.println(true ? 1 : 1L); // 结果为1(long)
    System.out.println(true ? 1 : false); // 结果为1,任何类型都不能转为boolean
}