A char can be cast into any numeric type, and vice versa.
When an integer is cast into a char, only its lower 16 bits of data are used; the other part is ignored.
For example:
char ch = (char)0XAB0041; // The lower 16 bits hex code 0041 is assigned to ch System.out.println(ch); // ch is character A
When a floating-point value is cast into a char, the floating-point value is first cast into an int, which is then cast into a char.
char ch = (char)65.25; // Decimal 65 is assigned to ch System.out.println(ch);// ch is character A
When a char is cast into a numeric type, the character's Unicode is cast into the specified numeric type.
int i = (int)'A'; // The Unicode of character A is assigned to i System.out.println(i); // i is 65
Implicit casting can be used if the result of a casting fits into the target variable.
Otherwise, explicit casting must be used.
For example, since the Unicode of 'a' is 97, which is within the range of a byte, these implicit castings are fine:
byte b = 'a'; int i = 'a';
But the following casting is incorrect, because the Unicode \uFFF4
cannot fit into a byte:
byte b = '\uFFF4';
To force this assignment, use explicit casting, as follows:
byte b = (byte)'\uFFF4';
Any positive integer between 0 and FFFF
in hexadecimal can be cast into a character implicitly.
Any number not in this range must be cast into a char explicitly.
For example, the following characters statements
int i = '2' + '3'; // (int)'2' is 50 and (int)'3' is 51 System.out.println("i is " + i); // i is 101 int j = 2 + 'a'; // (int)'a' is 97 System.out.println("j is " + j); // j is 99 System.out.println(j + " is the Unicode for character " + (char)j); // 99 is the Unicode for character c System.out.println("Chapter " + '2');