为什么java字符打印号码?
我有以下课程,请参阅
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和字符串连接运算符与"G" + "o"
将打印Go
。
System.out.println("G" + "o"); System.out.println('G' + 'o');
第一个+作为一个连续的操作员并且连接两个字符串。 但在第二种情况下,它充当了一个加法运算符,并添加了这两个字符的ASCII(或者你说的是UNICODE)值。
Java中的加号会添加两个数字,除非其中一个是一个String,在这种情况下它会进行字符串连接。
在第二种情况下,您没有字符串(您有char
,它们的Unicode代码点将被添加)。
这个先前的SO问题应该对这个问题有所了解,在你的情况下,你基本上最终添加了他们的ASCII值(对于G为71)+(对于o为111)= 182,你可以在这里查看值)。
您必须使用String.valueOf(char c)
将该字符转换回字符串。
“+”运算符是为int
和String
定义的:
int + int = int String + String = String
添加char + char时,最佳匹配将是:
(char->int) + (char->int) = int
但是""+'a'+'b'
会给你ab
:
( (String) + (char->String) ) + (char->String) = String
+总是用于sum
(添加两个数字的目的)如果它是除String
之外的数字,如果它是String
则用于两个String
串联目的。
我们知道java中的char总是表示数字 。
这就是为什么在你的情况下,它实际上计算两个数字的总和为(71+111)=182
而不是字符的连接为g
+ o
= go
如果您将其中一个更改为String
那么它将连接两个,如System.out.println('G' + "o")
,它将按预期打印Go
。