在 Java 中将字符转换为整数

有人可以向我解释一下这里发生了什么:

char c = '+';
int i = (int)c;
System.out.println("i: " + i + " ch: " + Character.getNumericValue(c));

这将打印 .这是否意味着我必须依靠原始转换来转换为 ?那么我如何将a转换为?i: 43 ch:-1charintCharacterInteger

编辑:是的,如果它不是一个数值,我知道会返回,这对我来说是有意义的。问题是:为什么进行原始转换会返回?Character.getNumericValue-143

Edit2:是 ASCII 的 ,但我希望演员不会像没有成功一样成功。否则,这意味着有两种语义等效的方法可以执行相同的操作,但结果不同?43+getNumericValue


答案 1
Character.getNumericValue(c)

返回指定的 Unicode 字符所表示的值。例如,字符(罗马数字 50)将返回值为 50 的 int。java.lang.Character.getNumericValue(char ch)int'\u216C'

大写、小写和全宽变体形式的字母 A-Z 的数值介于 10 到 35 之间。这与 Unicode 规范无关,Unicode 规范不会为这些 char 值分配数值。('\u0041' through '\u005A')('\u0061' through '\u007A')('\uFF21' through '\uFF3A' and '\uFF41' through '\uFF5A')

此方法返回字符的数值,作为非负整数值;

-2 如果字符的数值不是非负整数;

-1(如果字符没有数值)。

这是链接。


答案 2

如文档明确说明,将字符的值作为数字返回。
如果字符不是数字,则返回。Character.getNumericValue()-1

如果要获取装箱对象的数字 Unicode 码位,则需要先将其拆箱:Character

int value = (int)c.charValue();