Java 中的Character.getNumericValue(..) 对于大写和小写字符返回相同的数字

The*_*boy 6 java char

我面前有一本书,其中包含以下代码片段

    int a = Character.getNumericValue('a');
    int z = Character.getNumericValue('z');

    int A = Character.getNumericValue('A');
    int Z = Character.getNumericValue('Z');

    System.out.println(a);
    System.out.println(z);
    System.out.println(A);
    System.out.println(Z);
Run Code Online (Sandbox Code Playgroud)

然后,该示例继续使用这些值作为迭代的上限和下限,这意味着分配给a和的整数A具有不同的值,但是当我运行上面的代码时,我得到以下输出。

10
35
10
35
Run Code Online (Sandbox Code Playgroud)

我失去理智了吗?这不应该是输出四个不同的整数吗?

rge*_*man 8

这是该getNumericValue方法的指定行为。

字母 AZ 的大写形式('\u0041' 到 '\u005A')、小写形式('\u0061' 到 '\u007A')以及全角变体('\uFF21' 到 '\uFF3A' 和 '\uFF41'到 '\uFF5A') 形式的数值范围为 10 到 35。

这些值的目的是在解析数字时允许使用多种基数。例如,在解析十六进制数字时,AF(和af)必须表示10-15。解析支持最多 36 个基数,这将允许“Z”或“z”代表 35。

该数值与这些字母的实际 Unicode 值是不同的概念,这些字母是唯一的,例如'A'is 65'a'is97等。