Java字符文字值与getNumericValue()

为什么我对大写和小写文字都得到相同的结果? 例如:

char ch1 = 'A'; char ch2 = 'a'; char ch3 = 'Z'; char ch4 = 'z'; print("ch1 -- > " + Integer.toBinaryString(Character.getNumericValue(ch1))); print("ch2 -- > " + Integer.toBinaryString(Character.getNumericValue(ch2))); print("ch3 -- > " + Integer.toBinaryString(Character.getNumericValue(ch3))); print("ch4 -- > " + Integer.toBinaryString(Character.getNumericValue(ch4))); 

结果我得到:

 ch1 -- > 1010 ch2 -- > 1010 ch3 -- > 100011 ch4 -- > 100011 

并没有真正看到’A’和’a’之间的区别。 即使我使用UTF格式的字符文字(’u’为’u’,’u’为\ u0061),我也会得到相同的结果。

它的行为完全符合记录 :

字母AZ大写(’\ u0041’到’\ u005A’),小写(’\ u0061’到’\ u007A’)和全宽变体(’\ uFF21’到’\ uFF3A’和’\ uFF41’)通过’\ uFF5A’)表单的数值从10到35。

基本上这意味着在解析hex(比如说)时, 0xfa == 0xFA ,正如您所期望的那样。

我只希望在使用像base64这样的东西时才能解决问题。

从评论来看,你实际上是在寻找字符的代码点,而不是它们的数值,所以我只是把它分成答案。 getNumericValue()函数返回字符在解释其字形时所表示的数字,它不返回字符的代码点。 例如, getNumericValue('5')返回5作为int ,而不是5的代码点。

要使用代码点,只需使用您的变量或字符文字。 char是一种数值数据类型。 例如, System.out.println((int)'a'); 将打印65,非常简单。