可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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