为什么无法将char强制转换为int?

3
由于某种原因,以下代码无法工作:
char cValue = '8';
int digits = (int)cValue;

它一直返回5或7等数值。

我只是好奇为什么会这样 - 我正在使用Character.getNumericValue(cValue);

为什么会发生这种情况?


4
你实际上获得了值为56的字符,这是字符'8'的ASCII值吗? - Greg Hewgill
你可以直接写成 char cValue = 8;。这样强制转换就会按预期成功。 - Kerrek SB
2个回答

6
你可以将char强制转换为int类型,而且实际上你已经这样做了。字符'8'的二进制表示实际上是56(十进制)。请参见any ASCII chart进行转换。你所需要的是解析,而不是强制类型转换。getNumericValue()解析char并给出其数字等价物。强制转换char只是改变了类型,但保留了位模式。然后根据它们所关联的变量类型解释这些位。

3

Java中的char是一个无符号16位值。将其强制转换为int,可以得到字符的Unicode值。字符'8'的Unicode值为十进制56。

而getNumericValue则完全不同——它给出字符的意义,如果它是一个具有数字意义的字符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接