Concerning primitives: When I cast from smaller to bigger types, the casts are implicit, when I cast from bigger to smaller types, I need to explicitly cast the primitives,
char is Java's only unsigned type, therefore its value range does not fully contain any other Java type's value range.
char
You must use an explicit cast operator for any conversion where the target type's range doesn't fully cover the source type's range.