Это отлично работает:
int foo = bar.charAt(1) - '0';
Но это не так - потому что bar.charAt(x) возвращает char:
int foo = bar.charAt(1);
Кажется, что вычитание '0' из char отличает его к целому числу.
Почему, или как, вычитает строку '0' (или это char?) конвертирует другой char в целое число?