当string是不可变的时候,怎么来System.out.println(s.concat("some string")); 返回更改的值

Sav*_*avi 2 java string immutability

我写了以下代码:

public static void main(String[] args) {
    // TODO Auto-generated method stub
    String s = new String("abc");
    System.out.println(s.concat("def"));
}
Run Code Online (Sandbox Code Playgroud)

它正在返回输出:"abcdef"

如果字符串是不可变的,这怎么可能.

Era*_*ran 6

s.concat("def")返回一个新String实例.String引用的实例s保持不变.

您可以添加另一个println语句来自己查看:

public static void main(String[] args) {
    String s = new String("abc");
    System.out.println(s.concat("def"));
    System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)

您还可以在Javadoc中看到concat:

如果参数字符串的长度为0,则返回此String对象.否则,返回一个String对象,该对象表示一个字符序列,该字符序列是此String对象表示的字符序列与参数字符串表示的字符序列的串联.

String仅当您String向此方法传递空值时才返回原始文件.