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?
This behavior is documented in the JLS - 15.25. Conditional Operator ? : :
When you write
the second type is converted to a
char
.Go through the JLS, it explains the behavior (same approach) in other cases.
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
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.