为什么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)将该字符转换回字符串。

“+”运算符是为intString定义的:

 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