我有以下课程,见
public class Go {
public static void main(String args[]) {
System.out.println("G" + "o");
System.out.println('G' + 'o');
}
}
这是编译结果;
Go
182
为什么我的输出包含数字?
答案 0 :(得分:9)
在第二种情况下,它会添加两个字符的unicode代码(G-71和o-111)并打印总和。这是因为char
被视为数字类型,因此在这种情况下+
运算符是通常的求和。
答案 1 :(得分:2)
+
的 'G' + 'o'
运算符会打印添加charCode,而"G" + "o"
会Go
打印{{1}}。
答案 2 :(得分:2)
Java中的加号会添加两个数字,除非其中一个是一个字符串,在这种情况下它会进行字符串连接。
在你的第二种情况下,你没有字符串(你有char
,并且会添加它们的Unicode代码点。)
答案 3 :(得分:1)
System.out.println("G" + "o");
System.out.println('G' + 'o');
第一个+充当连续操作员并连接两个字符串。但在第二种情况下,它充当了一个加法运算符,并添加了这两个字符的ASCII值(或者你说的是UNICODE)。
答案 4 :(得分:1)
This以前的SO问题应该对这个问题有所了解,在你的情况下,你基本上最终会添加他们的ASCII值(对于G为71)+(对于o为111)= 182,你可以检查值{ {3}})。
您必须使用here将该字符转换回字符串。
答案 5 :(得分:0)
+ 始终用于sum
(添加两个数字的目的),如果它是String
以外的数字,如果它是String
则用于连接目的两个String
。
我们知道java中的char总是代表数字。
这就是为什么在你的情况下,它实际上将两个数字的总和计算为(71+111)=182
而不是将字符连接为g
+ o
= go
如果您将其中一个更改为String
,那么它将连接这两个
例如System.out.println('G' + "o")
它会按预期打印Go
。
答案 6 :(得分:0)
int
和String
都定义了“+”运算符:
int + int = int
String + String = String
添加char + char时,最佳匹配将是:
(char->int) + (char->int) = int
但是""+'a'+'b'
会给你ab
:
( (String) + (char->String) ) + (char->String) = String