为什么char +另一个char =一个奇怪的数字

这是代码片段:

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.valueOfCharacter.toString方法来确保+的操作数中的至少一个是操作符为字符串连接的字符串。

JLS 15.18添加运算符

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

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

至于为什么你得到195,这是因为在ASCII中, 'a' = 97'b' = 98 ,而97 + 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最后的笑)。 通过为字符串连接提供不同的标记,可以很容易地避免许多这种混淆。


也可以看看

  • 是否与空字符串连接进行字符串转换真的那么糟糕?

我不会说Java,但195是97 + 98 = ab的ASCII码。 显然, cacb被解释为它们的整数值,可能是因为+加法似乎不会自动导致字符串连接。

如果您希望将String作为+运算符的结果,则必须使用String类型作为操作数。

你应该写:

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

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

+运算符不像字符串那样操作字符。 这里发生的是ab被转换为它们的整数ASCII码点–97和98 – 然后加在一起。