为什么char +另一个char =一个奇怪的数字

Dav*_*vid 2 java string-concatenation char implicit-conversion

这是代码片段:

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

输出是:

195
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我认为'a' + 'b'是,要么"ab","12"3.

这里发生了什么?

pol*_*nts 14

+两个char是算术加法,而不是字符串连接.您必须执行类似的操作"" + ca + cb,或者使用String.valueOfCharacter.toString方法来确保操作符的至少一个操作数+String字符串连接.

JLS 15.18添加运算符

如果+运算符的任一操作数的类型是String,则操作是字符串连接.

否则,运算+符的每个操作数的类型必须是可转换为原始数字类型的类型,否则会发生编译时错误.

至于为什么你得到195,这是因为在ASCII,'a' = 97'b' = 98,和97 + 98 = 195.


这执行基本intchar铸造.

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

这忽略了字符编码方案的问题(初学者不应该担心......)!


作为一个注释,Josh Bloch指出,+对于字符串连接和整数加法都是重载是相当不幸的("为字符串连接重载+运算符可能是错误的." - Java Puzzlers,Puzzle 11:The Last笑).通过为字符串连接提供不同的标记,可以很容易地避免很多这种混淆.


也可以看看