Существует overload of println
that specifically takes a char
. Это обрабатывает char
s отдельно; без этой перегрузки, все равно будет оставаться перегрузка int
, char
будет повышаться до int
, а перегрузка int
будет печатать 97
, что является кодовой точкой Юникода (строки ASCII для английских букв, цифр и общей пунктуации).
Однако в контексте индекса массива оно продвигается до int
за JLS Section 15.10.3, "Array Access Expressions".
Условное выражение подвергается унарной цифровой рекламе (§5.6.1). Повышенный тип должен быть int или возникает ошибка времени компиляции.
Унарное числовое расширение что способствует char
к int
, так что он получает доступ b[97]
.
Это, как правило, лучше, чтобы избежать этого неявного расширения в char
к int
, чтобы избежать чего-то неожиданного, такого как доступа к b[97]
.
Предлагаю отметить ответ, принятый –