【发布时间】:2018-01-28 22:02:17
【问题描述】:
我有一个类的以下代码:
public class sqrt
{
public sqrt()
{
char start = 'H';
int second = 3110;
char third = 'w';
byte fourth = 0;
char fifth = 'r';
int sixth = 1;
char seventh = 'd';
float eighth = 2.0f;
boolean ninth = true;
String output = new String(start + second + " " + third + fourth +
fifth + sixth + seventh + " " + eighth + " " + ninth);
System.out.println(output);
}
}
需要的输出是:
H3110 w0r1d 2.0 true
但是,这会输出以下内容:
3182 w0r1d 2.0 true
我只能假设这是因为它看到了 char 'H' 的数字 (ASCII) 值并将其添加到 int 3110。
我的问题是:
不应该new String() 将其中的每个项目转换为字符串并将它们连接起来吗?
如果我将输出更改为:
String output = start + second + " " + third + fourth +
fifth + sixth + seventh + " " + eighth +
" " + ninth;
它做同样的事情,并将 char 和 int 的值加在一起,然后再连接其余部分。
我知道我可以通过在start 之前添加"" + 来克服这个问题,我想这解释了为什么它看到char 'H' 的ASCII 值(因为它查看下一个值,看到它是一个整数,并从那里开始?),但我很困惑为什么 new String() 没有按预期工作。
PS,我想写出更好的问题,而且我知道我在这里仍然是一个初学者,所以在这方面的任何建议也将不胜感激。如果有人愿意花时间提供帮助,我们非常欢迎 PM。
PPS,如果我弄清楚这是为什么,我会自己发布答案,但我真的很想学习这个,我只是很困惑。
【问题讨论】:
-
一般来说,你不应该在 Java 中使用
new String()。对于字符串连接,使用+或StringBuilder。 -
没有
new String();也一样,我将编辑问题以显示这一点。我很抱歉。 -
new String(String)只是为您提供具有给定内容的唯一字符串,它不应该改变与您的问题有关的任何内容 -
我想你要找的答案在这里stackoverflow.com/questions/8688668/…
-
@ZLHysong,正如您所推测的,基本上问题出在
+运算符的语义上:在char和int操作数之间,它意味着 addition 而不是 字符串连接。如果您将所有+s 替换为StringBuilder.append(...),则没有歧义,并且可以正常工作。
标签: java string concatenation