最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下。

关于这三个类在字符串处理中的地位不言而喻,那么他们到底有什么优缺点,到底什么时候该用谁呢?下面我们从以下几点说明一下

  1.三者在执行速度方面的比较:StringBuilder >  StringBuffer  >  String

  2.String <(StringBuffer,StringBuilder)的原因

    String:字符串常量

    StringBuffer:字符串变量

    StringBuilder:字符串变量

    从上面的名字可以看到,String是“字符串常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问  ,比如这段代码:

1  String s  =   " abcd " ;
2  s  =  s + 1 ;
3  System.out.print(s); //  result : abcd1

我们明明就是改变了String型的变量s的,为什么说是没有改变呢?

其实这是一种欺骗,JVM是这样解析这段代码的:首先创建对象s,赋予一个abcd,然后再创建一个新的对象s用来 执行第二行代码,也就是说我们之前对象s并没有变化,所以我们说String类型是不可改变的对象了,由于这种机制,每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉,可想而知这样执行效率会有多低。

而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在同一个对象上操作的,这样就不会像String一样创建一些新的的对象进行操作了,当然速度就快了。(比如吃饭,你吃三碗饭用同一个碗  与 你吃三碗饭用三个碗(每次拿碗肯定比直接用上次吃完饭的碗直接盛饭要慢) 的吃饭效率是不一样的)

   3.一个特殊的例子:

1  String str  =  “This is only a”  +  “ simple”  +  “ test”;
3  StringBuffer builder  =   new  StringBuilder(“This is only a”).append(“ simple”).append(“ test”);

  

    你会很惊讶的发现,生成str对象的速度简直太快了,而这个时候StringBuffer居然速度上根本一点都不占优势。其实这是JVM的一个把戏,实际上:

    String str = “This is only a” + “ simple” + “test”;

    其实就是:

    String str = “This is only a simple test”;

    所以不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的String对象的话,速度就没那么快了,譬如:

    String str2 = “This is only a”;

    String str3 = “ simple”;

    String str4 = “ test”;

    String str1 = str2 +str3 + str4;

    这时候JVM会规规矩矩的按照原来的方式去做。

  4.StringBuilder与 StringBuffer

   StringBuilder:线程非安全的

   StringBuffer:线程安全的

   当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。

对于三者使用的总结:

1.如果要操作少量的数据用 = String

          

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

          

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

String,StringBuffer,StringBuffer的区别相关推荐

  1. String与StringBuffer的区别

    String与StringBuffer的区别 简单地说,就是一个变量和常量的关系.StringBuffer对象的内容可以修改:而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象. St ...

  2. String、StringBuffer、与StringBuilder的区别

    原文:http://www.cnblogs.com/sevenlin/p/sevenlin_StringBuffer_StringBuilder20150806.html String.StringB ...

  3. String , StringBuffer 和 StringBuilder 区别

    转载:http://www.blogjava.net/chenpengyi/archive/2006/05/04/44492.html 相信大家对 String 和 StringBuffer 的区别也 ...

  4. String,StringBuffer和StringBuilder区别?

    String是字符串常量,final修饰;StringBuffer字符串变量(线程安全);StringBuilder 字符串变量(线程不安全).此外StringBuilder和StringBuffer ...

  5. JAVA中String与StringBuffer的区别

    String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结. 在java中有3个类来负责字符的操作. 1.C ...

  6. String和StringBuffer的区别,String长度是固定的?

    String和StringBuffer的区别,String长度是固定的? 区别: 1. String类字符串的长度是固定的,StringBuffer类字符串的长度是可变的.因为String改变的是地址 ...

  7. php 有 stringbuffer,string,stringbuffer以及stringbuilder的区别

    string,stringbuffer以及stringbuilder的区别? 小编在一次电话面试中,被问过StringBuilder是线程安全的吗,脱口而出是安全的,结果人家质疑我你是2年开发经验吗. ...

  8. JavaSE(二十五)——String与StringBuffer、StringBuilder的区别、创建对象的几种方法、Http和Https的区别

    文章目录 1. String与StringBuffer.StringBuilder的区别 2. Java创建对象的几种方法 3. Http和Https的区别 1. String与StringBuffe ...

  9. String类和StringBuffer类的区别

    首先,String和StringBuffer主要有2个区别: (1)String类对象为不可变对象,一旦你修改了String对象的值,隐性重新创建了一个新的对象,释放原String对象,StringB ...

  10. String,StringBuffer,StringBuilder的区别

    1 Java String 类是字符串常量 字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串. 需要注意的是,String的值是 ...

最新文章

  1. 百分点大数据技术团队:数据治理“PAI”实施方法论
  2. 【学术相关】TopPaper:AI 初学者经典论文列表
  3. python实现异步的几种方式_终于搞明白了,异步Python比同步Python究竟快在哪里?...
  4. 域控下发脚本_域环境下做到单用户登陆控制脚本
  5. 以post方式携窗体等参数向服务器发送请求 发出去的字节流 返回的内容
  6. Linux下执行.sh文件
  7. 一些弹出框的用法例子(二)
  8. WordPress Citizen Space插件跨站请求伪造漏洞
  9. sql日期处理(出自邹建的book)
  10. 在JavaScript中将字符转换为ASCII代码
  11. JavaScript 实现:输出斐波那契数列
  12. helloworld代码_12 种主流编程语言输出“Hello World”
  13. java注释指导手册
  14. Qt实现的局域网通信软件(仿QQ版本)
  15. myeclipse 10破解
  16. 独立开发者能够从这位作家身上学些什么
  17. 消息对话框(消息盒子)
  18. 二十一、Java8新特性——Stream API【黑马JavaSE笔记】
  19. -bash: ifconfig: command not found
  20. Alibaba Arthas 3.1.2版本发布:增加logger/heapdump/vmoption命令,支持tunnel server

热门文章

  1. uni.uploadFile 使用POST 上传到亚马逊 AMS s3 上
  2. 基于Arduino、ESP8266的物联网项目开发方案整理、毕业设计(第一波)
  3. 渗透中常用的在线工具和网站总结
  4. 15个常用excel函数公式_【Excel公式函数】一大波常用的日期公式来袭,强烈建议收藏!...
  5. OpenCV人脸目标检测、摄像头实时检测
  6. ArcGIS栅格按照象元大小生成矢量的方法
  7. 现在个人博客网站还能够备案吗?是否需要企业身份才能备案?
  8. HP小型机系统管理员必读
  9. UI设计教程分享:关于海报的合成过程
  10. 英特尔核显驱动hd630_AMD与英特尔彻底失去合作关系?中止Kaby Lake-G更新支持