关闭

String 、StringBuffer、 StringBuilder的区别

标签: javastringstringbuilderstringbuffer
308人阅读 评论(0) 收藏 举报
分类:

从长度上进行比较的话:

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
查看评论

String,StringBuffer,StringBuilder 三者之间的区别是什么?

1.String 字符串产量 2.StringBuffer 字符串变量(线程安全) 3.StringBuilder 字符串变量 (非线程安全) 1.String类型,是java内的对象,是不可改变的对象,当每次对String进行改变时,都需要生成一个新的String对象,然后将指针指向...
  • qq_30278639
  • qq_30278639
  • 2016-05-10 14:09
  • 864

Java基础之String、StringBuffer与StringBuilder的区别及应用场景

1 String、StringBuffer与StringBuilder (1)String 字符串常量; /** Strings are constant; their values cannot be changed after they * are created. String bu...
  • chenliguan
  • chenliguan
  • 2016-07-14 18:35
  • 6309

String/StringBuffer/StringBuilder区别

参考:http://blog.csdn.net/rmn190/article/details/1492013 String字符串常量 StringBuffer字符串变量(线程安全) StringBuilder字符串变量(非线程安全) 简要的说,String类型和StringBuffer类型的主要性能...
  • pymqq
  • pymqq
  • 2015-07-23 22:23
  • 607

String、Stringbuffer与Stringbuilder的区别

1、在执行速度上:Stringbuilder->Stringbuffer->String 2、String是字符串常量       Stringbuffer是字符串变量       Stringbuilder是字符串变量 ...
  • u011247942
  • u011247942
  • 2017-06-22 15:03
  • 285

Java中String、StringBuffer、StringBuilder简述及区别

容我喝杯82年的Java压压惊~~~如有欢迎指正。 1.String:由多个字符组成的一串数据,相当与字符数组。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。字符串是常量,...
  • MAGIC_JSS
  • MAGIC_JSS
  • 2016-05-10 23:35
  • 1376

C#:string、stringBuffer、stringBuilder的区别

最近对这几个傻傻分不清楚,在网上搜集了一些资料,现在总结一下。 string是基本类型,第一条语句,实际上是创建一个名为s1的string类型的对象,系统为s1分配足够的内存来保存s1中的数据。第二条语句,并不是在s1所指向的地址内添加字符串“ceshi”,而是创建一个新的字符串实例,给它分配足够的...
  • qq_28187979
  • qq_28187979
  • 2017-08-03 09:59
  • 1300

java面试题String,StringBuilder,StringBuffer

String StringBuffer StringBuilder面试题
  • dfdsggdgg
  • dfdsggdgg
  • 2016-05-09 22:39
  • 2759

Java常考面试题7 深刻认识String、StringBuilder、StringBuffer

深刻认识String、StringBuilder、StringBuffer
  • HZ_LIZX
  • HZ_LIZX
  • 2017-02-10 10:22
  • 517

Java String为什么是不可变类,StringBuffer与StringBuilder区别

熟悉Java的都知道String类是不可变,但String类为什么设计成不可变类,如何做到不可变没有仔细想过。 String为什么设计成不可变类? 1.Java字符串池的设计方式。     String s1="abc"; String s2=&qu...
  • chenchaofuck1
  • chenchaofuck1
  • 2016-03-10 15:15
  • 2141

String StringBuilder StringBuffer 对比 总结得非常好

转自:http://www.iteye.com/topic/522167 作者:每次上网冲杯Java时,都能看到关于String无休无止的争论。还是觉得有必要让这个讨厌又很可爱的String美眉,赤裸裸的站在我们这些Java色狼面前了。嘿嘿.... 众所周知,
  • clam_clam
  • clam_clam
  • 2011-09-28 19:00
  • 33237
    个人资料
    • 访问:187070次
    • 积分:1965
    • 等级:
    • 排名:千里之外
    • 原创:64篇
    • 转载:1篇
    • 译文:0篇
    • 评论:96条
    最新评论