+
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.
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
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…