символ с = 7; Почему этот оператор будет выполняться в Java без ошибок? - PullRequest
4 голосов
/ 06 января 2010
char c=7;

Приведенный выше оператор будет выполняться в Java без ошибок, даже если мы назначаем номер символу. где 7 не символ. Почему он будет выполняться?

Ответы [ 5 ]

13 голосов
/ 06 января 2010

Поскольку в 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.

5 голосов
/ 06 января 2010

Чтение http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Character.html, в частности, раздел Представления символов Unicode. Необработанное значение символа имеет целочисленный эквивалент.

4 голосов
/ 06 января 2010

Неявное преобразование имеет место. Компилятор может проверить диапазон.

2 голосов
/ 06 января 2010

Обратите внимание на разницу между двумя выходами:

  int x = 47;
  System.out.println('[' + x + ']');  // 231 (= 91 + 47 + 93)
  System.out.println("[" + x + "]");  // [47]

A char - это и символ, и число. (Воск для пола и десертная посыпка.)

0 голосов
/ 06 января 2010

Неявно охватывает символ ascii.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...