Почему я не могу типизировать от char до int? - PullRequest
3 голосов
/ 20 сентября 2011

По какой-то причине следующий код не работает:

char cValue = '8';
int digits = (int)cValue;

Он продолжает давать какое-то значение 5 или 7 или что-то в этом духе.

Мне просто любопытнопочему - вместо этого я использую Character.getNumericValue(cValue);.

Почему это происходит?

Ответы [ 2 ]

6 голосов
/ 20 сентября 2011

Вы можете typecast char для int, и фактически вы это делаете. Двоичное представление символа '8' на самом деле 56 (десятичное). Смотрите любой ASCII-график для конверсий. То, что вы ищете, это анализ, а не приведение. getNumericValue() анализирует символ и выдает его числовой эквивалент. Приведение символа просто изменяет тип и оставляет последовательность битов такой же. Затем биты интерпретируются в соответствии с типом переменной, с которой они связаны.

3 голосов
/ 20 сентября 2011

Java char - это 16-разрядное значение без знака.Когда вы приводите один к int, вы получаете значение Unicode для персонажа.Символ '8' имеет значение Unicode, равное десятичному 56.

getNumericValue совершенно другой - он дает ЗНАЧЕНИЕ символа, если это символ с числовым значением.

...