+
из двух char
- это арифметическое сложение, а не конкатенация строк. Вы должны сделать что-то вроде "" + ca + cb
или использовать методы String.valueOf
и Character.toString
, чтобы убедиться, что хотя бы один из операндов +
является String
для оператора как конкатенации строк.
Если тип любого из операндов оператора +
равен String
, то операция является конкатенацией строк.
В противном случае тип каждого из операндов оператора +
должен быть типом, который может быть преобразован в примитивный числовой тип, иначе произойдет ошибка времени компиляции.
Относительно того, почему вы получаете 195, это потому, что в ASCII 'a' = 97
и 'b' = 98
и 97 + 98 = 195
.
Выполняет базовое int
и char
приведение.
char ch = 'a';
int i = (int) ch;
System.out.println(i); // prints "97"
ch = (char) 99;
System.out.println(ch); // prints "c"
Это игнорирует проблему схем кодирования символов (о которых новичку не стоит беспокоиться ... пока!).
В качестве примечания Джош Блох отметил, что весьма прискорбно, что +
перегружен как для конкатенации строк, так и для добавления целых чисел («Возможно, было ошибкой перегрузить оператор + для конкатенации строк». - Java Puzzlers , Головоломка 11: Последний смех). Многих подобных путаниц можно легко избежать, если использовать другой токен для конкатенации строк.
Смотри также