Hola:
Un char se representa internamente como un byte, según la tabla ascii
http://ascii.cl/es/ . El símbolo '1' corresponde al valor ASCII 49. Si tu en java asignas un char a un entero, te está dando el valor de ese byte
int a = '1'; // a vale 49
y si tuvieras una letra, como 'A', daría igualmente un valor, en este caso 65.
Si tienes un String, tienes varios caracteres (o uno solo), si tienes "10" tienes dos bytes, el 49 y el 48, según la tabla ascii anterior. Java no sabe convertir esos dos bytes seguidos 49 y 48 a un solo valor entero.
Por ello, si quieres el valor numérico que se "ve" en la cadena (el 1 en '1' o el 10 en "10") y no el valor ascii de los bytes, debes usar el método parseInt() de Integer
Se bueno.