java String和StringBuilder

T8Z*_*T8Z 1 java string stringbuilder

我对String和String Builder感到困惑.这是我的简单代码

StringBuilder sb1 = new StringBuilder("123");
String s1 = "123";
sb1.append("abc"); 
s1.concat("abc");
System.out.println(sb1 + " " + s1);
Run Code Online (Sandbox Code Playgroud)

SB1输出123ABC.没关系!因为它使用append方法.但是字符串s1应该是abc123,但它的输出是abc.为什么?什么是concat方法的目的?请解释一下.

谢谢

Jon*_*eet 15

.But String s1应为abc123,但输出为abc.

字符串在Java中是不可变的.concat不会更改现有字符串 - 它返回一个字符串.所以如果你使用:

String result = s1.concat("abc");
Run Code Online (Sandbox Code Playgroud)

那么将是"123ABC" -但s1仍然是"123".(或者更确切地说,值s1仍将是对内容为"123"的字符串的引用.)

对于String可能期望更改内容的任何其他方法也是如此,例如replacetoLowerCase.当你在字符串上调用一个方法但不使用结果时(就像这里的情况一样),这几乎总是一个错误.

字符串是不可变的这一事实是StringBuilder首先存在的全部原因.