Вопрос

Вот фрагмент кода:

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

Результатом является:

195

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

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

Это было полезно?

Решение

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


Смотрите также

Другие советы

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

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

Вам следует написать:

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top