为什么连接的字符会打印出一个数字?

7
我有以下类:
   public class Go {
     public static void main(String args[]) {
      System.out.println("G" + "o");
      System.out.println('G' + 'o');
     }
   }

这是编译结果:
  Go
  182

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

可能是 java int 和 char 的重复问题。 - mhatch
7个回答

9

在第二种情况下,它会添加两个字符的Unicode编码(G-71和o-111),并打印总和。这是因为char被认为是一种数值类型,所以在这种情况下,+操作符是通常的加法运算。


2
使用字符常量 'G' + 'o'+ 运算符会打印出 charCode 的加法结果,而使用 字符串拼接运算符"G" + "o" 则会打印出 Go

2

Java中的加号可以将两个数字相加,但如果其中一个加数是字符串,则会进行字符串拼接。

在您的第二个案例中,您没有字符串(而是使用了char),它们的Unicode代码点将被相加。


1
System.out.println("G" + "o");
  System.out.println('G' + 'o');

第一个加号被视为连接运算符,将两个字符串连接起来。但在第二种情况下,它作为加法运算符,并添加这两个字符的ASCII(或者你可以说UNICODE)值。


1

这个之前的SO问题应该对这个主题有所启示,在你的情况下,你基本上要将它们的ASCII值相加(G的值为71)+(o的值为111)= 182,你可以在这里检查这些值。

你将不得不使用{{link3:String.valueOf(char c)}}将该字符转换回字符串。


0

“+”运算符被定义用于intString类型:

int + int = int

String + String = String

当将 char + char 相加时,最佳匹配将是:

(char->int) + (char->int) = int

但是""+'a'+'b'会给你ab:
( (String) + (char->String) ) + (char->String) = String

0

+符号通常用于sum(将两个数字相加)的目的,如果它是数字,除了String,如果它是String,则用于连接两个String

我们知道在Java中char始终表示数字

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

如果您将它们中的一个更改为String,则会将两个连接起来,例如System.out.println('G' + "o") 它将打印出您期望的Go


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接