Ответ 1
+
двух char
является арифметическим добавлением, а не конкатенацией строк. Вы должны сделать что-то вроде "" + ca + cb
или использовать методы String.valueOf
и Character.toString
, чтобы гарантировать, что хотя бы один из операндов +
является String
для оператора, который должен быть конкатенацией строк.
JLS 15.18 Аддитивные операторы
Если типом любого операнда оператора
+
является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: Последний смех). Многие из этих путаниц можно было легко избежать, если у вас есть другой токен для конкатенации строк.