5

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?

TheJediCowboy
  • 8,924
  • 28
  • 136
  • 208
  • 1
    This is the documented behavior. People usually consider digits to be case insensitive (think hexadecimal). [Reference](http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#getNumericValue(char)). – d125q Aug 07 '15 at 23:33
  • http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#getNumericValue%28char%29 you don't need to convert char to do math, you can also just cast it to int. For example c - '0' is a typical way to get an int between 0 and 9 for a character c between '0' and '9' – maraca Aug 07 '15 at 23:34
  • To get the ASCII/Unicode value, you can simply cast to an `int`: `System.out.println((int)'a');` – Mick Mnemonic Aug 07 '15 at 23:37

1 Answers1

7

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.

rgettman
  • 176,041
  • 30
  • 275
  • 357