来自文档
char数据类型是单个16位Unipre字符。
A
char由其代码点值表示:
- 分钟
'u0000'
(或0) - 最多:(
'uffff'
或65,535)
您可以在ASCII表上看到所有英文字母代码点。
请注意,
0 == u0000和
65,535 == uffff,以及之间的所有内容。它们是对应的值。
char实际上,A 仅存储为数字(其代码点值)。我们有语法来表示像
char c = 'A';这样的字符,但它等效于
char c =65;并且
'A' == 65为true。
因此,在您的代码中,字符用其十进制值表示以进行算术运算(整数从0到65,535)。
例如,char
'A'由其代码点
65(ASCII表中的十进制值)表示:
System.out.print('A'); // prints ASystem.out.print((int)('A')); // prints 65 because you casted it to an int请注意,a
short是一个16位有 符号 整数,因此即使a
char也是16位,a的最大整数值
char(65,535)仍超过a的最大整数值
short(32,767)。因此,
(short)从a强制转换为
char不能始终有效。并且a的最小整数值为
char0,而a的最小整数值为
short-32,768。
对于您的代码,假设
char是was
'D'。请注意,
'D' == 68由于其代码点是
68。
return 10 + ch - 'A';
这将返回
10 + 68 - 65,因此它将返回
13。
现在,假设字符是
'Q' == 81。
if (ch >= 'A' && ch <= 'F')
由于
'Q' > 'F'(
81 > 70),这是错误的,因此它将进入代码
else块并执行:
return ch - '0';
这将返回,
81 - 48因此它将返回
33。
您的函数返回一个
int类型,但是如果要返回一个类型
char或将其
int强制转换为
char之后的类型,则
33返回的值将表示该
'!'字符,因为
33它是其代码点值。在ASCII表或Unipre表中查找字符以进行验证
'!'== 33(比较十进制值)。



