Win a copy of Kotlin in Action this week in the Kotlin forum!
programming forums Java Java JSRs Mobile Certification Databases Caching Books Engineering Languages Frameworks Products This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
Marshals:
Sheriffs:
Saloon Keepers:
Bartenders:

# Binary numeric promotion

Harwinder Bhatia
Ranch Hand
Posts: 150
How does
char primitiveChar = 'b'-'a';
work? Why isn't binary numeric promotion being applied to ('b' - 'a') and the result not an integer?
I know I'm missing something here.
Thanks
Harwinder

Marlene Miller
Ranch Hand
Posts: 1392
Hi Harwinder,
You are correct, binary promotion does occur. The type of 'b' - 'a' is int.
Since 'b' and 'a' are literals, 'b' - 'a' is a constant expression.
A constant expression of type int can be assigned to a char without casting.

Marlene Miller
Ranch Hand
Posts: 1392
Here is a way to prove that 'b'-'a' is of type int.

Ranch Hand
Posts: 170
Hi Harwinder,
The result is an integer.

public class a
{
public static void main(String args[])
{
char a = 'b' - 'a';
System.out.println(a);
}

}
In the above mentioned code, it prints a character corresponding to the value 1(since 'b'-'a' will lead to 1).

Marlene Miller
Ranch Hand
Posts: 1392
char a = 'b' - 'a';
'b' and 'a' are literals of type char.
When the expression 'b'-'a' is evaluated, 'b' and 'a' are promoted to type int. The result of the expression 'b'-'a' is of type int.
When the = operation is performed, the value of the expression 'b'-'a' is converted to type char. The variable a holds a value of type char.
[ December 11, 2003: Message edited by: Marlene Miller ]

Sagarika nair
Ranch Hand
Posts: 39
A constant expression of type int can be assigned to a char without casting.
The above statement is true only if the integer value doesn't exceed 65535 right?Please correct me if I am wrong.

Marlene Miller
Ranch Hand
Posts: 1392
Whoops, I am getting sloppy. Thank you Sagarika for making the explanation better.
The value of the constant expression must be representable in the type of the variable.
[ December 11, 2003: Message edited by: Marlene Miller ]

 With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime.