这是代码片段:
public static void main (String[]arg)
{
char ca = 'a' ;
char cb = 'b' ;
System.out.println (ca + cb) ;
}
输出是:
195
为什么会这样?我认为那'a' + 'b'
将是"ab"
,"12"
或3
。
这里发生了什么?
这是代码片段:
public static void main (String[]arg)
{
char ca = 'a' ;
char cb = 'b' ;
System.out.println (ca + cb) ;
}
输出是:
195
为什么会这样?我认为那'a' + 'b'
将是"ab"
,"12"
或3
。
这里发生了什么?
+
二char
是算术加法,而不是字符串连接。您必须执行类似"" + ca + cb
, 或使用String.valueOf
andCharacter.toString
方法来确保至少有一个操作数+
是 aString
以使运算符成为字符串连接。
如果运算符的任一操作数的类型
+
是String
,则该操作是字符串连接。否则,运算符的每个操作数的
+
类型必须是可转换为原始数字类型的类型,否则会发生编译时错误。
至于为什么你得到 195,那是因为在 ASCII 中,'a' = 97
and'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笑)。通过为字符串连接使用不同的标记,可以很容易地避免很多这种混淆。
我不会说 Java,但 195 是 97 + 98 = 和 的 ASCIIa
码b
。很明显,ca
并且cb
被解释为它们的整数值,可能是因为+
添加似乎不会自动导致字符串连接。
如果你想要一个字符串作为 + 运算符的结果,你必须使用类型字符串作为操作数。
你应该写:
public static void main (String[]arg)
{
String ca = "a" ;
String cb = "b" ;
System.out.println (ca + cb) ;
}
应用于 char 操作数的 + 运算符表现为算术和。
+
运算符不会像对字符串那样对字符进行操作。这里发生的是,a
并且b
被转换为它们的整数 ASCII 代码点 - 97 和 98 - 然后加在一起。