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.valueOf和Character.toString方法来确保操作符的至少一个操作数+是String字符串连接.
如果
+运算符的任一操作数的类型是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"
Run Code Online (Sandbox Code Playgroud)
这忽略了字符编码方案的问题(初学者不应该担心......)!
作为一个注释,Josh Bloch指出,+对于字符串连接和整数加法都是重载是相当不幸的("为字符串连接重载+运算符可能是错误的." - Java Puzzlers,Puzzle 11:The Last笑).通过为字符串连接提供不同的标记,可以很容易地避免很多这种混淆.