-
Any bigger than an int can NEVER be assigned to an int or anything smaller than int (byte, char, or short) without explicit cast.
-
Constant values up to int can be assigned (without cast) to variables of lesser size (e.g. short to byte) if the values are representable by the variable.
-
Operands of mathematical operators are ALWAYS promoted to AT LEAST int. (e.g. byte*byte both bytes will be first promoted to int) and the return value will be AT LEAST int.
-
Compound assignment operators (+=, *= etc) have strange ways so ready this carefully: A compound assignment expression of the form E1 op = E2 is equivalent to E1 = (T)((E1) op (E2)), where T is the type of E1
-
A char value can ALWAYS be assigned to an int variable, since the int type is wider than the char type.
-
A narrowing primitive conversion may be used if all of the following conditions are satisfied:
-
-
The expression is a constant expression of type int.
-
The type of the variable is byte, short or char.
-
The value of expression is representable in the type of the variable.
-
NOTE THAT narrowing conversion doesn’t apply to long or double. So, char ch = 30L; will fail althrough 30 is representable by a char.
-