以下是代码段:
public static void main (String[]arg)
{
char ca = 'a' ;
char cb = 'b' ;
System.out.println (ca + cb) ;
}
输出结果为:
195
为什么会这样?我认为'a' + 'b'
可能是"ab"
,"12"
或3
。
这是怎么回事?
答案 0 :(得分: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"
这忽略了字符编码方案的问题(初学者不应该担心......)。
作为一个注释,Josh Bloch指出,+
因字符串连接和整数加法而过载是相当不幸的(“为字符串连接重载+运算符可能是错误的。” - Java Puzzlers ,Puzzle 11:The Last Laugh)。通过为字符串连接提供不同的标记,可以很容易地避免很多这种混淆。
答案 1 :(得分:3)
我不会说Java,但195是97 + 98 = a
和b
的ASCII代码。显然,ca
和cb
被解释为它们的整数值,可能是因为+
添加似乎不会自动导致字符串连接。
答案 2 :(得分:3)
如果你想让一个String作为+运算符的结果,你必须使用String类型作为操作数。
你应该写:
public static void main (String[]arg)
{
String ca = "a" ;
String cb = "b" ;
System.out.println (ca + cb) ;
}
应用于char操作数的+运算符表现为算术和。
答案 3 :(得分:1)
+
运算符不会像字符串那样对字符进行操作。这里发生的是a
和b
被转换为整数ASCII码点--97和98 - 然后加在一起。