String为不可变字符,而StringBuffer是可变字符是可以动态添加的.
注意一点....速度区别
在String中对"+"进行了重写,这样可以实现如"test" + "test1"这样的操作...
在内存中实际上是生成了一份test的拷贝和一份test1的拷贝然后在复制给另外一个变量....所以这种操作速度很慢..
而StringBuffer则不是....
另外一个问题.....字符串的比较....
如: String str1 = new String("test");
Stirng str2 = new String("test");
在使用str1.equals(str2)时 返回为true;
为什么呢.? 因为在String中重写了Object的equals方法....
而在StringBuffer中
StringBuffer buff1 = new StringBuffer("Test");
StringBUffer buff2 = new StringBuffer("Test");
在使用buff1.equals(buff2)时返回为false;
为什么呢.? 因为这里的equals来自Object中,在StringBuffer中并没有对equals进行重写...
是否可改动的区别:
- public class demo {
- public static void stringChanged(String str) {
- str = str + "changed";
- }//企图改变不可变的字符串str
- public static void bufferChanged(StringBuffer buff) {
- buff = buff.append("changed");
- }//改变字符流buff
- public static void main(String[] args) {
- String str = new String("demo");
- StringBuffer buff = new StringBuffer("demo");
- stringChanged(str);
- bufferChanged(buff);
- System.out.println(str + " " + buff);
- }
- }
- 结果输出为: demo demochanged
从上面的例子可以看出String与StringBuffer的区别.
在Core Java中提到在不关心字符串处理效率的情况下,可以不适用StringBuffer而才用StringBuffer...