Перевод кода в char и обратно

char — беззнаковая 16-битная code unit UTF-16. При арифметике он продвигается до int:

char letter = 'A';
int codeUnit = letter;        // 65
int expression = letter + 1;  // 66, тип int
char next = (char) expression; // 'B'

Цифра и ее код

Это разные операции:

char digit = '7';
int code = digit;                    // 55
int value = Character.digit(digit, 10); // 7
int asciiOnly = digit - '0';         // 7, только после проверки '0'..'9'

Обратное преобразование:

char digit = Character.forDigit(7, 10); // '7'

Смещение символа

Идея исходной задачи — прибавить смещение к char:

static char shiftCodeUnit(char source, int offset) {
    int result = source + offset;
    if (result < Character.MIN_VALUE || result > Character.MAX_VALUE) {
        throw new IllegalArgumentException("char overflow");
    }
    return (char) result;
}

Это сдвигает code unit, а не «следующую букву алфавита»: между Unicode-кодами могут быть не-буквы, а supplementary-символ состоит из пары surrogate.

Для полного code point:

int codePoint = "😀".codePointAt(0);
String symbol = new String(Character.toChars(codePoint));

См. Символы char Java.

На собеседовании

  • Тип выражения char + int? int.
  • Чем (int) '7' отличается от числового 7? Первое — кодовая единица 55.
  • Вмещает ли char любой Unicode-символ? Нет, только одну UTF-16 code unit.
  • Как создать строку из code point? new String(Character.toChars(codePoint)).