字符串concat的行为方式不同

时间:2013-05-02 08:41:34

标签: java string string-concatenation concat

有人可以解释以下情况吗?

String s = "Testing";
s.concat("Java 1");
System.out.println(s);
s = s.concat(" Java 2");
System.out.println(s);

以上的输出是:

Testing
Testing Java 2

5 个答案:

答案 0 :(得分:7)

这是因为,在Java String对象中是immutable(存储在对象中的值无法更改)。当您执行concatreplace等操作时,会在内部创建一个新对象来保存结果。

答案 1 :(得分:3)

当你说

String s = "Testing";
s.concat("Java 1"); // this returns a new String which is "TestingJava 1"
System.out.println(s);

concat方法产生了 String,但您的程序未存储该 String。返回新String的原因显示了java中StringBuilder类的不可变行为。

对于可变字符串操作,您可以使用StringBuffer或{{1}}

答案 2 :(得分:1)

String.concat返回你忽略的连接字符串,试试这个

String s = "Testing";
s = s.concat("Java 1");

答案 3 :(得分:1)

阅读docs:

  

参数字符串的长度为0,然后返回此String对象。否则,将创建一个新的String对象,表示一个字符序列,该字符序列是此String对象表示的字符序列与参数字符串表示的字符序列的串联。

您的s.concat("Java 1");返回新的string

答案 4 :(得分:1)

1)在第一个中你没有指定一个新值 2)第二次为您分配一个新值s = s.concat(" Java 2");