String 对象已经分配就不能修改了,这两个语句:
String str1="it is a string";
str1=str1+"for you!";
其实也没有改变旧串,而是内部新建了一个str1+"for you!"的串,将其引用赋给了str1。
就是说旧串的内容并没有改变,str1被赋予了新的引用值之后,旧的串将被回收。StringBuffer则是可以直接修改串的内容的。这些从程序表面上不易看出来
String str1="it is a string";
str1=str1+"for you!";
其实也没有改变旧串,而是内部新建了一个str1+"for you!"的串,将其引用赋给了str1。
就是说旧串的内容并没有改变,str1被赋予了新的引用值之后,旧的串将被回收。StringBuffer则是可以直接修改串的内容的。这些从程序表面上不易看出来
同样的操作用StringBuffer 可以这样实现:
StringBuffer str1=new StringBuffer(new String(new char[50]));
str1.replace(0,14,"it is a string");
str1.replace(14,22,"for you!");
这样StringBuffer str1与你的做法得到的字符串相同。
比较一下,两者的改变是不同的,一个是重新赋值,一个才是改变。
StringBuffer是String的wrapper类,
StringBuffer可调用append方法来修改。StringBuffer str1=new StringBuffer("it is a StringBuffer");
str1.append("for you!");
StringBuffer 可以当作一个动态的 String 工具类。