String StringBuffer StringBuilder比较

 public static void main(String[] args) { 
         String str1 = new String("abc"); 
         String str2 = new String("abc"); 
         System.err.println(str1.equals(str2));  //true
           
         StringBuffer sb1 = new StringBuffer("abc"); 
         StringBuffer sb2 = new StringBuffer("abc"); 
         System.err.println(sb1.equals(sb2));  //false
     } 

分析:String 重写equals方法后,比较的值大小,而StringBuffer没有重写equals方法,用的是Object的equals()方法,而原生Object的equals()比较的是引用

sb1,sb2是两个对象,分配两块内存空间,引用肯定不相等,所以是false;

再比较一下String 和StringBuffer其他的区别

String:
是对象不是原始类型.
为不可变对象,一旦被创建,就不能修改它的值.
对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String 是final类,即不能被继承.

StringBuffer:
是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立,
StringBuffer sb = new StringBuffer();
note:不能通过付值符号对他进行付值.
sb = "welcome to here!";//error
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer
中付值的时候可以通过它的append方法.
sb.append("hello");

StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符添加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。

 

 

1性能上StringBuffer快

String修改字符窜每次都要新建一个String对象,分配新的内存空间,实际上她是通过建立StringBuffer,再调用StringBuffer.append()方法,然后toString()转换成字符串,而且把原来的没用的内存空间回收,操作起来比StringBuffer麻烦

2线程安全

另外StringBuffer是线程安全的,在jdk1.5以后有StringBuilder,是线程不安全的,因此如果是单线程操作,建议用StringBuilder,因为效率更快

        对于三者使用的总结: 1.如果要操作少量的数据用 = String

                        2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder

                        3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

 

 

你可能感兴趣的:(java基础)