String 、StringBuffer、 StringBuilder的区别

来源:互联网 发布:发票认证软件 编辑:程序博客网 时间:2024/06/14 20:11

从长度上进行比较的话:

String 是定长的,不可改变的;

StringBuffer,和StringBuilder 是不定长,可改变

另外需要注意的是:StringBuilder 和StringBuffer 的equals 方法不能用来比较两个字符串的内容是否相等,这两个类都直接继承自Object ,并且没有重写equals 方法。

StringBuilder s1 = new StringBuilder("123");   StringBuilder s2 = new StringBuilder("123"); Logger.e(s1.equals(s2));  输出结果是:false 
 

若要比较内容是否相同,s1.toString().equals(s2.toString());

简单说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度一定会是相当慢的。


java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。

  若要比较内容是否相同,sb1.toString().equals(sb2.toString())
  简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。
0 0
原创粉丝点击