String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)

 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。
 而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。而在某些特别情况下, String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢,而特别是以下的字符串对象生成中, String 效率是远要比 StringBuffer 快的:
 String S1 = “This is only a” + “ simple” + “ test”;
 StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);
 你会很惊讶的发现,生成 String S1 对象的速度简直太快了,而这个时候 StringBuffer 居然速度上根本一点都不占优势。其实这是 JVM 的一个把戏,在 JVM 眼里,这个
 String S1 = “This is only a” + “ simple” + “test”; 其实就是:
 String S1 = “This is only a simple test”; 所以当然不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的 String 对象的话,速度就没那么快了,譬如:
String S2 = “This is only a”;
String S3 = “ simple”;
String S4 = “ test”;
String S1 = S2 +S3 + S4;
这时候 JVM 会规规矩矩的按照原来的方式去做

在大部分情况下 StringBuffer > String
StringBuffer
Java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
例如,如果 z 引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用 z.append("le") 会使字符串缓冲区包含“startle”,而 z.insert(4, "le") 将更改字符串缓冲区,使之包含“starlet”。
在大部分情况下 StringBuilder > StringBuffer
java.lang.StringBuilde
java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。

转载于:https://www.cnblogs.com/yibao/p/6029850.html

String与StringBuilder区别总结相关推荐

  1. String StringBuffer StringBuilder区别与联系

    String     StringBuffer     StringBuilder String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量 ...

  2. String,StringBuffer,StringBuilder区别

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

  3. String SringBuffer StringBuilder区别

    最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下. 关于这三个类在字符串处理中的位置不言而喻,那 ...

  4. string stringbuffer stringbuilder 区别

    共同点:String StringBufferStringBuilder 都是字符串相关函数,StringBuffer StringBuilder都是AbstractStringBuilder的子类 ...

  5. Java学习之String StringBuffer StringBuilder区别

    1.String:对象长度是不可变的,是线程安全. 2.StringBuffer:对象长度是可变的,是线程安全. 3.StringBuilder:对象长度是可变,不是线程安全. 转载于:https:/ ...

  6. 2.Java中String,StringBuilder以及StringBuffer的关系与区别

    String     StringBuffer     StringBuilder String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量 ...

  7. String , StringBuffer 和 StringBuilder 区别

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

  8. String、StringBuffer、StringBuilder区别

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

  9. Java基础之String,StringBuilder,StringBuffer三者的区别

    Java基础之String,StringBuilder,StringBuffer三者的区别 目录 运行速度方面 线程安全方面 小结 1. 运行速度方面 运行速度,在这方面运行速度快慢为:StringB ...

最新文章

  1. base64编码的作用【转】
  2. 计算机网络 实验六 静态路由配置,《计算机网络》实六 静态路由配置 实验报告.doc...
  3. mysql语句执行顺序
  4. docker发布spring cloud应用
  5. 把图片存成视频 python
  6. matlab用solve解方程错误提示,MATLAB中使用solve解决方程组的问题
  7. 2、Task 使用 ContinueWith 而不要使用 Wait
  8. 解决android帮助文档打开慢
  9. c语言在线测试题,C语言测试题
  10. javaweb超市仓库管理系统
  11. SoftIce基础入门
  12. drop index mysql_MySQL修改和删除索引(DROP INDEX)
  13. Word 里文字对齐推荐这4种方法
  14. 成都拓嘉启远:拼多多直通车推广怎么做才能有开好
  15. AutoAugment中16种数据增强方法可视化直观展示
  16. java 搞笑翻译_那些让我们哭笑不得的爆笑翻译!佩服网友的脑洞!
  17. Spring AOP(切面面向接口)
  18. 学习笔记(17):零基础掌握 Python 入门到实战-重复利用,事半功倍
  19. html绘制地铁线路图,地铁线路图怎么画?几个步骤助你轻松作出
  20. DHCP 中继Snooping解释以及配置

热门文章

  1. Python内置函数ord()与chr()
  2. linux中node跨服务执行文件,linux部署node.js服务并启动服务
  3. 零基础 | 入行软件测试,你想知道的都在这里了
  4. 女孩子偷偷学好软件测试,想要年薪30w也没有很难!
  5. mysql tcmalloc jemalloc_tcmalloc jemalloc 和ptmalloc 对比
  6. 计算机控制pud,控制系统状态空间实施方案计算机控制技术课程实施方案
  7. 云服务器之间进行文件转移,windows服务器之间文件如何转移
  8. linux 命令 单词,linux常用命令的英文单词缩写
  9. Python 基础知识 D5
  10. 查看matlab当前路径,MATLAB R2012a 的当前路径和路径搜索