7

我有以下课程:

   public class Go {
     public static void main(String args[]) {
      System.out.println("G" + "o");
      System.out.println('G' + 'o');
     }
   }

这是编译结果;

  Go
  182

为什么我的输出包含一个数字?

4

7 回答 7

9

在第二种情况下,它将两个字符(G - 71 和 o - 111)的unicode代码相加并打印总和。这是因为char被认为是数字类型,所以+在这种情况下,运算符是通常的求和。

于 2012-08-23T05:41:33.507 回答
2

+带有字符常量的运算符'G' + 'o'打印 charCode 的加法和带有will 打印的字符串连接运算符"G" + "o"Go

于 2012-08-23T05:41:34.590 回答
2

Java 中的加号将两个数字相加,除非其中一个和数是字符串,在这种情况下,它会进行字符串连接。

在第二种情况下,您没有字符串(您有char,并且将添加它们的Unicode代码点)。

于 2012-08-23T05:42:49.133 回答
1
System.out.println("G" + "o");
  System.out.println('G' + 'o');

第一个 + 充当连接运算符并连接两个字符串。但在第二种情况下,它充当加法运算符并添加这两个字符的 ASCII(或者你可以说 UNICODE)值。

于 2012-08-23T05:41:46.760 回答
1

这个先前的SO问题应该对这个主题有所了解,在你的情况下,你基本上最终会添加它们的ASCII值(G的71)+(o的111)= 182,你可以在这里检查值)。

您必须使用 将该String.valueOf(char c)字符转换回字符串。

于 2012-08-23T05:46:01.253 回答
0

+总是用于sum(添加两个数字的目的),如果它是数字除外String,如果它String用于连接两个String.

我们知道 java 中的 char 总是代表一个 numeric

这就是为什么在您的情况下,它实际上将两个数字的总和计算为(71+111)=182而不是字符的串联作为g+ o=go

如果您更改其中一个,String那么它将连接这两个,例如 它会按您的预期System.out.println('G' + "o") 打印。Go

于 2012-08-23T06:02:32.973 回答
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
于 2012-08-23T06:08:54.313 回答