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

时间:2010-03-11 23:45:21

标签: java char string-concatenation implicit-conversion

以下是代码段:

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

输出结果为:

195

为什么会这样?我认为'a' + 'b'可能是"ab""12"3

这是怎么回事?

4 个答案:

答案 0 :(得分:14)

两个+

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

JLS 15.18 Additive Operators

  

如果+运算符的任一操作数的类型为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 Last Laugh)。通过为字符串连接提供不同的标记,可以很容易地避免很多这种混淆。


另见

答案 1 :(得分:3)

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

答案 2 :(得分:3)

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

你应该写:

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

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

答案 3 :(得分:1)

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