Ternary operator casts integer

2019-02-28 09:32发布

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.println((a>b)?"a":65);//65

Can somebody explain me why it is displaying "A" if I made variable 'a' as a character? And it should display 65 if I made "a" as a string?

3条回答
Root(大扎)
2楼-- · 2019-02-28 09:48

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.

查看更多
在下西门庆
3楼-- · 2019-02-28 09:52

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

查看更多
祖国的老花朵
4楼-- · 2019-02-28 09:57

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.

查看更多
登录 后发表回答