2

这是代码片段:

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

输出是:

195

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

这里发生了什么?

4

4 回答 4

14

+char是算术加法,而不是字符串连接。您必须执行类似"" + ca + cb, 或使用String.valueOfandCharacter.toString方法来确保至少有一个操作数+是 aString以使运算符成为字符串连接。

JLS 15.18 加法运算符

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

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

至于为什么你得到 195,那是因为在 ASCII 中,'a' = 97and'b' = 9897 + 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"

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


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


也可以看看

于 2010-03-11T23:47:07.713 回答
3

我不会说 Java,但 195 是 97 + 98 = 和 的 ASCIIab。很明显,ca并且cb被解释为它们的整数值,可能是因为+添加似乎不会自动导致字符串连接。

于 2010-03-11T23:47:50.147 回答
3

如果你想要一个字符串作为 + 运算符的结果,你必须使用类型字符串作为操作数。

你应该写:

public static void main (String[]arg) 
{
    String ca = "a" ; 
    String cb = "b" ; 
    System.out.println (ca + cb) ; 
}

应用于 char 操作数的 + 运算符表现为算术和。

于 2010-03-11T23:53:32.037 回答
1

+运算符不会像对字符串那样对字符进行操作。这里发生的是,a并且b被转换为它们的整数 ASCII 代码点 - 97 和 98 - 然后加在一起。

于 2010-03-11T23:49:09.883 回答