19

这段代码:

String s = "TEST";
String s2 = s.trim();

s.concat("ING");
System.out.println("S = "+s);
System.out.println("S2 = "+s2);

导致此输出:

S = TEST
S2 = TEST
BUILD SUCCESSFUL (total time: 0 seconds)

为什么“TEST”和“ING”没有连接在一起?

4

6 回答 6

49

String 是不可变的,这意味着您不能在 Java 中更改 String。concat()返回一个新的连接字符串。

String s = "TEST";
String s2 = s.trim();
String s3 = s.concat("ING");

System.out.println("S = "+s);
System.out.println("S2 = "+s2);
System.out.println("S3 = "+s3);
于 2010-05-12T12:41:11.560 回答
10

因为String是不可变的——类String不包含改变String对象本身内容的方法。该concat()方法返回一个String包含操作结果的新方法。而不是这个:

s.concat("ING");

尝试这个:

s = s.concat("ING");
于 2010-05-12T12:40:45.117 回答
3

我想你想做的是:

s2 = s.concat("ING");

concat 函数不会更改字符串 s,它只是返回 s 并附加参数。

于 2010-05-12T12:42:02.327 回答
3

concat返回一个字符串,因此您基本上是在调用 concat 而不存储它返回的内容。尝试这个:

String s = "Hello";
String str = s.concat(" World");
System.out.println(s);
System.out.println(str);

应该打印:

Hello
Hello World
于 2010-05-12T12:44:35.213 回答
2

.concat()方法返回新的连接值。你做了s.concat("ING")->这给出了返回值“测试”。但是你必须在声明的变量中接收它。

如果你这样做s=s.concat("ING");了,那么“s”的值将变为“TESTING”

于 2014-05-28T02:53:48.247 回答
0

当在任何 String obj 上调用 concat() 时,String 是不可变的

字符串 s="abc"; 新的 String obj 由 s 在 String pool ref 中创建

s = s.concat("def"); 这里又创建了一个带有 val abcdef 的 String obj 并由 s 引用

于 2014-03-18T09:05:36.113 回答