Ternary operator casts integer

匿名 (未验证) 提交于 2019-12-03 02:35:01

问题:

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?

回答1:

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.



回答2:

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.



回答3:

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



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!