Eso no te devuelve el valor del entero que representa el tercer caracter de la cadena, te esta devolviendo el valor del codigo unicode de ese caracter
Pero aun así, buscando el API he encontrado otro metodo
int i = Char.digit(cadena.charAt(3),10);
y otro
int i = Char.getNumericValue(cadena.charAt(3));
aunque este ultimo parece algo confuso, por que te devuelve tambien los valores de algunas letras...
Pese a lo que dijera Mulder, la verdad no esta ahí fuera. Está en el API