char
is effectively an unsigned 16-bit integer type in Java.
Like other integer types, you can perform an assignment conversion from an integer constant to any integer type so long as it’s in the appropriate range. That’s why
byte b = 10;
works too.
From the JLS, section 5.2:
In addition, if the expression is a
constant expression (ยง15.28) of type
byte, short, char or int :
- A narrowing primitive conversion may
be used if the type of the variable is
byte, short, or char, and the value of
the constant expression is
representable in the type of the
variable.- A narrowing primitive
conversion followed by a boxing
conversion may be used if the type of
the variable is :
- Byte and the value
of the constant expression is
representable in the type byte.- Short
and the value of the constant
expression is representable in the
type short.- Character and the value of
the constant expression is
representable in the type char.