2019独角兽企业重金招聘Python工程师标准>>>

 

一、三者在执行速度方面的比较:

StringBuilder >  StringBuffer  >  String

二、String <(StringBuffer,StringBuilder)的原因

    String:字符串常量

    StringBuffer:字符串变量

    StringBuilder:字符串变量

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

1      String  s = "abcd";
                2        s = s+1;

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

       而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样在重新创建对象进行操作了,当然速度就快了。

三、一个特殊的例子:

String str = “This is only a” + “ simple” + “ 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会规规矩矩的按照原来的方式去做。

四、StringBuilder与 StringBuffer

     StringBuilder:线程非安全的

     StringBuffer:线程安全的

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

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

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

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

转载于:https://my.oschina.net/lsl1991/blog/670873

StringBuilder 、StringBuffer 、 String相关推荐

  1. String、StringBuffer、StringBuilder的理解

    问题: 理解 Java的字符串,String.StringBuffer.StringBuilder 有什么区别? 知识点 字符串设计和实现考量 String是Immutable(线程安全.字符串常量池 ...

  2. String、StringBuffer、StringBuilder三者的异同

    String.StringBuffer.StringBuilder String.StringBuffer.StringBuilder三者的异同 StringBuffer.StringBuilder的 ...

  3. String、StringBuffer、与StringBuilder的区别

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

  4. String、StringBuffer、StringBuilder介绍

    文章目录 String 源码分析 继承关系 CharSequence 底层数据结构 常用构造器: 无参构造器 入参为String类型 入参为char数组类型 入参为StringBuffer: 入参为S ...

  5. 小瓜牛漫谈 — String、StringBuffer、StringBuilder

    任何一个系统在开发的过程中, 相信都不会缺少对字符串的处理. 在 java 语言中, 用来处理字符串的的类常用的有 3 个: String.StringBuffer.StringBuilder. 它们 ...

  6. Java基础篇:String、StringBuffer、StringBuilder

    一.String: String并不是基本数据类型,而是一个被final修饰的不可变对象.通过查看JDK文档会发现几乎每一个修改String对象的操作,实际上都是创建了一个全新的String对象. 字 ...

  7. Java中String、StringBuffer、StringBuilder的区别

    Java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...

  8. String、StringBuffer、StringBuilder区别

    无论是做Java或是Android,都避免不了遇到这个问题,其实开发过程中一般情况下是不会纠结,这个问题是面试必选经典题,今天有时间,就总结一下. String.StringBuffer.String ...

  9. String、StringBuffer、StringBuilder类

    String.StringBuffer.StringBuilder类:java提供了string.stringbuffer两个类来封装字符串,并提供了一系列方法来操作字符串对象. String类是不可 ...

  10. 深度学习String、StringBuffer、StringBuilder

    相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一下String.StringBuilder和StringBuffer这几个类,分析它 ...

最新文章

  1. php多表头表格,HTML多表头表格代码示例
  2. 多点子接口的帧中继配置(MP SubInterface FrameRealy)
  3. Linux 文件查找命令
  4. 工作与生活的平衡-一些955的良心公司
  5. 学Java后未来发展方向和前景怎么样?
  6. 启动postgres
  7. q-dir 打不开文件_Q-Dir –多窗格文件管理器
  8. leetcode面试题 04.02. 最小高度树(深度优先搜索)
  9. python安装后cmd找不到_关于Python3.6环境中,virtualenv找不到命令的解决方法
  10. Elastic Jeff Yoshimura:开源正在开启新一轮的创新 | 人物志
  11. linux的xampp单独启动mysql,linux的xampp重要的文件和目录
  12. gitolite安装及配置教程centos7
  13. DataSet和实体类的相互转换
  14. find和xargs
  15. docker进阶与实战 3 理解docker镜像
  16. 再说“两本交换机图书内容完全不一样”
  17. 实现微信自动回复看电影!
  18. 第十五周助教心得体会
  19. 2019最新第三方支付牌照公司名单「完整」
  20. cad计算机中怎么用除号,CAD中特殊符号如何输入?超全教程,一看就懂!

热门文章

  1. Boost:字符串转换实例
  2. ITK:提取矢量图像的分量/通道
  3. VTK:可视化之ScalarVisibility
  4. VTK:可视化之Glyph3DMapper
  5. OpenCV HDF读写属性
  6. c++Hash Search哈希搜索的实现算法(附完整源码)
  7. C++Adaline自适应线性神经网络算法(附完整源码)
  8. C++trie类的实现(附完整源码)
  9. QT的QWhatsThis类的使用
  10. QT的QHttpPart类的使用