Поскольку в Java char
является целочисленным типом данных , значения которого представляют собой 16-разрядные целые числа без знака, представляющие единицы кода UTF-16. Поскольку char
является числовым типом данных, когда вы присваиваете ему числовое значение, он просто принимает кодировку любого символа Unicode, представленного этим значением.
Запустите следующие две строки кода:
char c = 65;
System.out.println("Character: " + c);
Вы увидите вывод:
Character: A
(я бы использовал 7, как вы сделали в примере, но это непечатный символ.) Символ «A» печатается, потому что десятичное значение 65 (или 41 шестнадцатеричное) кодируется в эту букву алфавита. См. Статью Джоэла Спольски Абсолютный минимум для каждого разработчика программного обеспечения. Абсолютно, положительно необходимо знать о Unicode и наборах символов (без оправданий!) для получения дополнительной информации в Unicode.
Обновление:
В случае, если вы говорите о том факте, что присвоение значения int
для char
обычно приводит к ошибке компиляции с "возможной потерей точности", как продемонстрирует следующий код:
int i = 65;
char c = i;
System.out.println("Character: " + c);
Ответ - именно то, что PSpeed упомянул в своем комментарии. В первой (двухстрочной) версии кода буквенное присваивание работает, потому что значение известно во время компиляции. Поскольку значение 65 находится в правильном диапазоне для значений char
(от \ u0000 до \ uffff включительно или от 0 до 65535), присваивание разрешено. Во второй (трехстрочной) версии назначение не разрешено, поскольку переменная int
может принимать любое значение от -2147483648 до 2147483647 включительно, большинство из которых выходит за пределы диапазона, который может содержать переменная char
.