为什么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.valueOf
和Character.toString
方法来确保+
的操作数中的至少一个是操作符为字符串连接的字符串。
JLS 15.18添加运算符
如果
+
运算符的任一操作数的类型是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 Puzzlers ,Puzzle 11:The最后的笑)。 通过为字符串连接提供不同的标记,可以很容易地避免许多这种混淆。
也可以看看
- 是否与空字符串连接进行字符串转换真的那么糟糕?
我不会说Java,但195是97 + 98 = a
和b
的ASCII码。 显然, ca
和cb
被解释为它们的整数值,可能是因为+
加法似乎不会自动导致字符串连接。
如果您希望将String作为+运算符的结果,则必须使用String类型作为操作数。
你应该写:
public static void main (String[]arg) { String ca = "a" ; String cb = "b" ; System.out.println (ca + cb) ; }
应用于char操作数的+运算符表现为算术和。
+
运算符不像字符串那样操作字符。 这里发生的是a
和b
被转换为它们的整数ASCII码点–97和98 – 然后加在一起。