为什么我可以给字符串添加字符,但不能给字符添加字符?

3

我想在一个字符串中添加一个字符,有时候需要将该字符重复一次后再添加到字符串中(即首先将其加倍)。我尝试了以下代码:

char s = 'X'; 
String string = s + s;

这引发了一个错误,但我已经向字符串中添加了一个字符,所以我尝试了:

String string = "" + s + s;

这个方法运行成功了,但是为什么在求和时加入字符串会导致它能够正确运行呢?这是因为添加一个字符串属性只有当字符被转为字符串才能使用吗?


2
可能是如何在Java中连接字符?的重复问题。 - Anderson Green
1
它抛出的错误可能就是你问题的答案 ;) - bengoesboom
一个字符只能有1个长度。Java不知道你将把这个表达式赋给一个字符串。 - Peter Lawrey
类似的问题如何在Java中连接字符?询问/回答了如何从>1个字符构造字符串。这个问题询问/回答了为什么尝试使用'+'运算符连接字符是不成功的,值得一问(因此撤销了重复标志,并在此处添加了+1 :))。 - cellepo
请澄清您问题的最后一句话 - 它是什么意思?@SahilMahajanMj 你知道吗? - cellepo
@K.Nicholas 你知道^吗? - cellepo
7个回答

7

这是因为String + Char = String,类似于int + double = double。

Char + Char是int类型,不管其他答案告诉你什么。

String s = 1; // 编译错误,类型不匹配。

你的代码应该是(String+Char)+Char。如果你写成了String+(Char+Char),那么你会在字符串中得到一个数字。例如:

System.out.println("" + ('x' + 'x')); // prints 240
System.out.println(("" + 'x') + 'x'); // prints xx - this is the same as leaving out the ( ).

1
好的,你的意思是 char 而不是 Char,但无论如何都是关于整数的好句子 :) - keyser
我最初写的是char/Character,但后来我不想继续使用它,所以我删除了并做出了妥协。:) 你说得对。在Java中,char并不代表任何东西。 - Xabster
那么在这个时候,为什么要保留“Char”?为什么不使用其中之一{charCharacter,'char/Character'}?我不确定为什么保留“Char”是更好的妥协?我想自己编辑它,但是想确保我没有漏掉什么... - cellepo

4

char + char 返回一个 int,因此编译器会抱怨 String string = (int),这是错误的。

要连接这些字符,你可以在开头使用空字符串 (""),这样 + 操作符将用于 String 连接,或者使用一个StringBuilder,它也可以附加字符。

char s = 'X';
String string = new StringBuilder().append(s).append(s).toString();

注意:变量chars,不是X

1
@Pshemo char+char=int。试试这个:char a = 'a',b = 'b',c; c = a + b; - Luiggi Mendoza
+1 并添加一些信息:char1 + char2 的结果是 int,即 UnicodeTablechar1char2 位置的总和。因此,对于 'X'+'X',结果将为 88 + 88 = 176,如果 OP 想要转换为 char,则为 ° - Pshemo

3
在Java中,char是一种原始的整数类型。因此,运算符+被定义为将两个字符相加,并产生一个int结果。而这个运算符只对字符串执行拼接操作。因此,其中一种方式如下:
"" + char1 + char2

这将把右操作数强制转换为字符串,这正是您想要实现的目标。
另外一点:在Java中,char是唯一的无符号原始数字类型,在我的一个项目中,我专门将其用作这样的类型。

感谢您提到"_unsigned_原始数值类型"(强调"unsigned")的侧记 - 我之前没有意识到这一点。 - cellepo

0
 String string = X + X;

这里的 X 被视为一个变量

你应该使用类似于

String string ="x x";

或者

String x = "something";
String y = "else";

那么 String string= x+y; 应该可以正常工作,这是因为你正在使用“+”符号进行连接,你也可以使用

string = string.concat(x+y); 

或者

string = string.concat("something"+"else");

0
当你执行 char s = 'X'; String string = X + X;

为什么不改成这样呢? char s = 'X'; String string = s + s;


2
我认为OP在发布时有些马虎:p - keyser
我不是Java专家--所以我认为他的解决方案可能就那么简单 :p - kelorek

0

在引号中添加 "" 会将返回类型更改为字符串。 如果不加,则返回类型为 char,与之不匹配。


0

String string = "" + X + X;

是连接的一个例子。通过在空字符串之前添加,您指定结果应该是字符串。代码的第一行告诉编译器您正在添加2个字符(或整数),这应该会产生一个整数,而不是一个字符串。


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