为什么一个字符+另一个字符=一个奇怪的数字
-
19-09-2019 - |
题
这是代码片段:
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
和 Character.toString
方法以确保至少一个操作数 +
是一个 String
运算符是字符串连接。
JLS 15.18 加法运算符
如果 a 的任一操作数的类型
+
运算符是String
, ,那么该操作就是字符串连接。否则,每个操作数的类型
+
运算符必须是可转换为原始数值类型的类型,否则会发生编译时错误。
至于为什么你得到 195,这是因为在 ASCII 中, 'a' = 97
和 '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 谜题, ,谜题11:最后的笑声)。通过使用不同的字符串连接标记可以轻松避免很多此类混乱。
也可以看看
其他提示
我不说话的Java,但195是97 + 98 =对于a
和b
的ASCII码。所以很明显,ca
和cb
被解释为它们的整数值,可能是+
除了这似乎并没有自动导致字符串连接的感觉。
如果你想有一个字符串作为+运算的结果必须使用String类型作为操作数。
您应该写:
public static void main (String[]arg)
{
String ca = "a" ;
String cb = "b" ;
System.out.println (ca + cb) ;
}
+运算施加在炭操作数表现为算术和
像它在字符串的+
操作者不超过的字符操作。这里发生的事情是,a
和b
被转换成相应的整数ASCII码点 - 97和98 - 然后加在一起