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笑).通过为字符串连接提供不同的标记,可以很容易地避免很多这种混淆.