问题
I have a book with the following code snippet in front of me
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);
The example then goes on to use these values as upper and lower limits for iteration which implies that the integers assigned to a
and A
have different values, but when I run the code above, I get the following output.
10
35
10
35
Am I losing my mind? Shouldn't this be four different integers outputted?
回答1:
This is the specified behavior of the getNumericValue method.
The letters A-Z in their uppercase ('\u0041' through '\u005A'), lowercase ('\u0061' through '\u007A'), and full width variant ('\uFF21' through '\uFF3A' and '\uFF41' through '\uFF5A') forms have numeric values from 10 through 35.
The point of these values is to allow for a wide variety of bases when parsing numbers. For example, in parsing hexadecimal numbers, A-F (and a-f) must represent 10-15. Parsing supports bases up to 36, which would allow a 'Z' or a 'z' to represent 35.
This numeric value is a different concept from the actual Unicode values for these letters, which are unique, e.g. 'A'
is 65
, 'a'
is 97
, etc.
来源:https://stackoverflow.com/questions/31888001/character-getnumericvalue-in-java-returns-same-number-for-upper-and-lower-ca