String 、StringBuffer、 StringBuilder的区别

原创 2016年05月31日 09:32:35

从长度上进行比较的话:

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 就会开始工作,那速度是一定会相当慢的。

相关文章推荐

Java中String、StringBuffer、StringBuilder的区别及面试经常出现的问题

1、String 、StringBuffer、StringBuilder的执行效率       StringBuilder > StringBuffer > String   当然这...

Java之String、StringBuilder、StringBuffer的区别

String : 字符串常量,它们的值在创建之后不能更改。代表字符串,Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。   String的值是不可变的,这就导致每次对...
  • T_P_F
  • T_P_F
  • 2017年01月12日 14:59
  • 230

String、StringBuilder和StringBuffer之间的区别

String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全)  简要的说, String 类型和 StringBuffer 类...

小白学习之路(一):stringbuilder ,stringbuffer,string区别

小白学习之路,不当之处欢迎大家指出纠正
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:String 、StringBuffer、 StringBuilder的区别
举报原因:
原因补充:

(最多只允许输入30个字)