Почему char + другой char= странный номер

Здесь фрагмент кода:

public static void main (String[]arg) 
{
    char ca = 'a' ; 
    char cb = 'b' ; 
    System.out.println (ca + cb) ; 
}

Вывод:

195

Почему это так? Я думаю, что 'a' + 'b' будет либо "ab", "12", либо 3.

Что здесь происходит?

Ответ 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: Последний смех). Многие из этих путаниц можно было легко избежать, если у вас есть другой токен для конкатенации строк.


См. также

Ответ 2

Я не говорю на Java, но 195 - 97 + 98 = коды ASCII для a и b. Таким образом, очевидно, что ca и cb интерпретируются как их целочисленные значения, вероятно, из-за добавления +, которое, как представляется, не приводит к конкатенации строк автоматически.

Ответ 3

Если вы хотите иметь строку в результате оператора +, вам нужно использовать тип String в качестве операндов.

Вы должны написать:

public static void main (String[]arg) 
{
    String ca = "a" ; 
    String cb = "b" ; 
    System.out.println (ca + cb) ; 
}

Оператор +, применяемый в операндах char, ведет себя как арифметическая сумма.

Ответ 4

Оператор + не работает над символами, как это делается над строками. Здесь происходит то, что a и b передаются в их целые кодовые точки ASCII - 97 и 98 - и затем добавляются вместе.