这是代码片段:

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 方法以确保至少一个操作数 + 是一个 String 运算符是字符串连接。

JLS 15.18 加法运算符

如果 a 的任一操作数的类型 + 运算符是 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 谜题, ,谜题11:最后的笑声)。通过使用不同的字符串连接标记可以轻松避免很多此类混乱。


也可以看看

其他提示

我不说话的Java,但195是97 + 98 =对于ab的ASCII码。所以很明显,cacb被解释为它们的整数值,可能是+除了这似乎并没有自动导致字符串连接的感觉。

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

您应该写:

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

+运算施加在炭操作数表现为算术和

像它在字符串的+操作者不超过的字符操作。这里发生的事情是,ab被转换成相应的整数ASCII码点 - 97和98 - 然后加在一起

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top