Все ответы верны, но, похоже, никто не дает полного объяснения, поэтому я попробую. Как и любой другой тип, char
хранится как число ( 16-бит в Java ). В отличие от других нечисловых типов, сопоставление значений сохраненных чисел со значениями char
s, которые они представляют, хорошо известно. Это отображение называется ASCII Table . Компилятор Java обрабатывает char
s как 16-битное число, и поэтому вы можете делать следующее:
System.out.print((int)'A'); // prints 65
System.out.print((char)65); // prints A
По этой причине ++
, --
и другие математические операции применяются к char
s и предоставляют способ увеличивать \ уменьшать их значения.
Обратите внимание, что преобразование выполняется циклически при превышении 16-битного значения:
System.out.print((char)65601); // also prints A
System.out.print((char)-65471); // also prints A
P.S. Это также относится к Kotlin:
println('A'.toInt()) // prints 65
println(65.toChar()) // prints A
println(65601.toChar()) // prints A
println((-65471).toChar()) // prints A