why does a char + another char = a weird number

前端 未结 4 1727
猫巷女王i
猫巷女王i 2020-12-20 00:25

Here\'s the code snippet:

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


        
4条回答
  •  情书的邮戳
    2020-12-20 01:11

    + of two char is arithmetic addition, not string concatenation. You have to do something like "" + ca + cb, or use String.valueOf and Character.toString methods to ensure that at least one of the operands of + is a String for the operator to be string concatenation.

    JLS 15.18 Additive Operators

    If the type of either operand of a + operator is String, then the operation is string concatenation.

    Otherwise, the type of each of the operands of the + operator must be a type that is convertible to a primitive numeric type, or a compile-time error occurs.

    As to why you're getting 195, it's because in ASCII, 'a' = 97 and 'b' = 98, and 97 + 98 = 195.


    This performs basic int and char casting.

     char ch = 'a';
     int i = (int) ch;   
     System.out.println(i);   // prints "97"
     ch = (char) 99;
     System.out.println(ch);  // prints "c"
    

    This ignores the issue of character encoding schemes (which a beginner should not worry about... yet!).


    As a note, Josh Bloch noted that it is rather unfortunate that + is overloaded for both string concatenation and integer addition ("It may have been a mistake to overload the + operator for string concatenation." -- Java Puzzlers, Puzzle 11: The Last Laugh). A lot of this kinds of confusion could've been easily avoided by having a different token for string concatenation.


    See also

    • Is concatenating with an empty string to do a string conversion really that bad?

提交回复
热议问题