有人可以解释以下情况吗?
String s = "Testing";
s.concat("Java 1");
System.out.println(s);
s = s.concat(" Java 2");
System.out.println(s);
以上的输出是:
Testing
Testing Java 2
答案 0 :(得分:7)
这是因为,在Java String
对象中是immutable
(存储在对象中的值无法更改)。当您执行concat
或replace
等操作时,会在内部创建一个新对象来保存结果。
答案 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");