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