想来只要是学习Java软件编程的都或多或少知道些它们之间的区别,今天偷闲总结一下:

String:固定长度的字符串,如果值发生了变化则必须重新生成新的String实例;

StringBuffer:当使用append 和 insert 方法拼接字符串时,每次结果都会对 StringBuffer 对象本身进行操作,不会像String那样生成新的对象再改变对象引用。另外StringBuffer是线程安全的可变字符序列。一个类似于String的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。每个字符串缓冲区都有一定的容量。当发生与源序列有关的操作(如源序列中的追加或插入操作)时,该类只在执行此操作的字符串缓冲区上而不是在源上实现同步。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。

String与StringBuffer的区别:

综上所述,我们可以清楚的发现在字符串对象经常改变的情况下推荐使用StringBuffer,应为StringBuffer比String更节省内存。言尽于此,似乎我们已经得出了String与StringBuffer的区别,呵呵呵,其实我们忽略了一点:在某些特别情况下,String对象的字符串拼接其实是被JVM解释成了StringBuffer对象的拼接,所以这些时候String对象的速度并不会比StringBuffer对象慢,而特别是以下的字符串对象生成中,String效率是远要比StringBuffer快的:

String name1 = “Gao” + “Huan” + “jie”;
        StringBuffer name2 = new StringBuilder(“Gao”).append(“Huan”).append(“jie”);

通过程序运行你可能会惊讶地发现生成name1对象的速度要比生成name2对象的速度块。其实这是JVM搞的鬼:在JVM 眼里,这个String name1 = “Gao” + “Huan” + “jie”;其实就是:String name1 = “GaoHuanjie”; 所以当然不需要太多的时间了;但大家这里要注意的是,如果你的字符串是来自另外的 String 对象的话,速度就没那么快了,譬如:

String firstName = “Gao”;
        String secondName = “Huan”;
        String thirdName = “jie”;
        String name1 = firstName + secondName + thirdName;
        这时候JVM就会按照原来的方式去做。

StringBuilder:一个可变的字符序列。此类提供一个与StringBuffer兼容的API,但不保证同步(也就是说StringBuilder是非线程安全的)。该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中由于StringBuilder不执行同步,它比StringBuffer要快。每个字符串生成器都有一定的容量。只要字符串生成器所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区。如果内部缓冲区溢出,则此容量自动增大。再次重申:将StringBuilder的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用StringBuffer。

StringBuilder与StringBuffer的区别:

StringBuilder是JDK1.5新增加的类而StringBuffer从JDK1.0就有;如上所述StringBuilder是非线程安全的而StringBuffer是线程安全,基于这一点,在不考虑线程安全的前提下建议使用StringBuilder。

String、StringBuffer、StringBuilder三者的区别相关推荐

  1. Java中的String,StringBuffer,StringBuilder有什么区别?

    相信有很多同学都是经常使用String的,或者也或多或少的听说过StringBuffer,StringBuilder,那么在经常遇见的面试题中(标题),到底这三个的区别是什么呢?让我们来一探究竟! S ...

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

    String,StringBuffer,StringBuilder三者的异同:? String:不可变的字符序列;底层使用char[]存储(用final修饰) StringBuffer:可变的字符序列 ...

  3. StringBuffer类,StringBuffer类和String的区别、String,StringBuffer,StringBuilder之间的区别

    1.概述 StringBuffer是一个线程安全的可变序列. 2.StringBuffer与String区别 (1)StringBuffer的长度和内容都可以发生改变,String却不行 (2)Str ...

  4. String, StringBuffer, StringBuilder之间的区别

    String与StringBuffer/StringBuilder之间的主要区别 1.String对象不可变, 如果修改会重新创建一个对象, 然后把值保存进去. StringBuffer/String ...

  5. java中 String StringBuffer StringBuilder的区别

    * String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...

  6. String StringBuffer StringBuilder区别与联系

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

  7. String StringBuffer StringBuilder的区别

    简单的事情做到极致也是一种能力. 首先,说一下目前我还没进行整理的情况下,我的理解: String 不可修改 修改后相当于又新创建创建一个字符串 比如: String a = "abc&qu ...

  8. 116day(String,StringBuffer,StringBuilder,模拟器和虚拟机的区别,复合命题的种类)

    <2018年2月4日>[连续116天] 标题:String,StringBuffer,StringBuilder,模拟器和虚拟机的区别,复合命题的种类: 内容: A.详见http://bl ...

  9. 浅谈 Java 字符串(String, StringBuffer, StringBuilder)

    我们先要记住三者的特征: String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 一.定义 查看 API 会发现,String ...

  10. String, StringBuffer,StringBuilder

    String, StringBuffer,StringBuilder的区别 java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,都实现了CharSe ...

最新文章

  1. Nginx教程系列二:Linux安装nginx
  2. USACO翻译:USACO 2012 JAN三题(3)
  3. linux中tr命令的用法
  4. CMake 进行调试
  5. 报名 | 全国知识图谱与语义计算大会(CCKS 2019)评测任务发布
  6. centos安装php服务器,在CentOS上安装搭建PHP+Apache+Mysql的服务器环境方法
  7. CentOS7 如何关闭防火墙
  8. 但我发现了幸福的超级玛丽
  9. OSPF-1-OSPF的数据库交换(4)
  10. MATLAB常用日期和时间函数
  11. 华为魔术2手机拆机图解_荣耀Magic2手机内部做工如何?荣耀Magic2手机拆机
  12. N个结点不同结构的二叉树个数
  13. C语言程序设计经典例题(考研必背)(基础篇)第二周
  14. 当前网络上迅雷各版本实际效果研究报告
  15. 线程生命周期与创建线程的多种方式
  16. 在ubuntu 20.04中使用Theano
  17. SELECT command denied to user ''@'%' for column 'xxx_id' in table 'users_xxx' 权限问题
  18. 物联网-电力监控平台(汇总)
  19. LeetCode通关:听说链表是门槛,这就抬脚跨门而入
  20. java枚举类型学习笔记

热门文章

  1. 添加同名工具后台验证后不跳转且保留用户输入的数值
  2. iphone 开发第四天 - 字符串
  3. HTML5 Media 原创翻译——第一章(持续更新中)
  4. 关于if else 和 switch 的区别 究竟哪个更快
  5. java-线程-用ThreadLocal类实现线程范围内的数据共享
  6. 处理文章附件路径问题
  7. 人性的弱点---第三篇---得人同意于你的十二种方法3
  8. 天天生鲜项目实战-思路 数据库设计
  9. 9-4NOIP模拟赛总结
  10. 2.24小时365天不间断服务 --- 优化服务器及基础设施的拓扑结构(冗余,负载分流,高性能的实现)