Я был бы прав, если бы думал, что символ был преобразован в его значение ASCII для целей этой математической операции?
Да (за исключением того, что вам нужно изменить первую строку на String str = "foo";
. В основном char
является целочисленным типом, который может использоваться в арифметических выражениях.
Javadoc говорит:
charAt
public char charAt(int index)
Возвращает значение символа по указанному индексу.
JLS (спецификация языка Java) говорит:
Глава 4.Типы, значения и переменные
Числовые типы - это целочисленные типы byte
, short
, int
, long
и char
и
4.2 Типы и значения примитивов:
char
, значения которых представляют собой 16-разрядные целые числа без знака, представляющие кодовые единицы UTF-16 (§3.1) "
и
4.2.1. Интегральные типы и значения
Для символа от '\u0000'
до'\uffff'
включительно, то естьот 0
до 65535
и
5.6.2.Двоичное числовое продвижение
Когда оператор применяет двоичное числовое продвижение к паре операндов, каждый из которых должен обозначать значение, которое может быть преобразовано в числовой тип, применяются следующие правила:
...
Расширяющее примитивное преобразование (§5.1.2) применяется для преобразования одного или обоих операндов, как указано в следующих правилах:
... если любой из операндовтипа long, другой преобразуется в long.
и
15.18.2.Аддитивные операторы (+ и -) для числовых типов
Бинарный оператор + выполняет сложение при применении к двум операндам числового типа, получая сумму операндов.
Двоичное числовое продвижениевыполняется над операндами (§5.6.2).