Ternary operator casts integer

前端 未结 3 1332
情歌与酒
情歌与酒 2020-12-21 15:25

Please have a look into the below code

int a =10;
int b =20;
System.out.println((a>b)?\'a\':65);//A
System.out.println((a>b)?a:65);//65
System.out.prin         


        
相关标签:
3条回答
  • 2020-12-21 16:26

    When your line System.out.println((a>b)?'a':65);//A is executed, JVM sees that your condition is false, so it will output 65. Now, you have provided 'a' as first possible output, 65 will be converted to char and 'A' will be returned, which has ASCII value 65.

    0 讨论(0)
  • 2020-12-21 16:28

    Ternary Operator work as if-then-else statement. Your getting those result because of autoboxing/unboxing rules for the conditional operator mentioned in JLS section 15.25

    first line System.out.println((a>b)?'a':65); condition is false so else block will print value of else block is treated as char because if block contain a char variable.

    Second line System.out.println((a>b)?a:65); condition is false so else block will print value of else block is treated as int because if block contain a int variable. here 65 is int value.

    Third line System.out.println((a>b)?"a":65); condition is false so else block will print value of else block is treated as String because if block contain a String variable. here 65 is a String not int.

    I have checked the JLS. for more info refer official JLS here

    0 讨论(0)
  • 2020-12-21 16:30

    This behavior is documented in the JLS - 15.25. Conditional Operator ? : :

    If one of the operands is of type T where T is byte, short, or char, and the other operand is a constant expression (§15.28) of type int whose value is representable in type T, then the type of the conditional expression is T

    When you write

    (a > b) ? 'a' : 65
    

    the second type is converted to a char.

    Go through the JLS, it explains the behavior (same approach) in other cases.

    0 讨论(0)
提交回复
热议问题