You are right that primitives are handled differently. The following would be done:
(Integer)(int)input.charAt(i);
, int, (Integer) . , . char, ; , . , char int - , , int .
, char → Integer . " ?" . , , , . ( char → Long ?), char → Short? Chars - 16 , .)
: - , : , List<Integer>. List<int> , int . , , - OO? : . , .