在Android/Java开发中,用来处理字符串常用的类有3种: String、StringBuilder、StringBuffer。

它们的异同点:

  • 1) 都是 final 类, 都不允许被继承;
  • 2) String 长度是不可变的, StringBuffer、StringBuilder 长度是可变的;
  • 3) StringBuffer 是线程安全的, StringBuilder 不是线程安全的。

String VS StringBuffer

String 类型和StringBuffer的主要性能区别:String是不可变的对象, 因此在每次对String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,性能就会降低。

使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。所以多数情况下推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。

在某些特别情况下, String 对象的字符串拼接其实是被 Java Compiler 编译成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢,例如:

生成 String s1对象的速度并不比 StringBuffer慢。其实在Java Compiler里,自动做了如下转换:

Java Compiler直接把上述第一条语句编译为:

这时候,Java Compiler会规规矩矩的按照原来的方式去做,String的concatenation(即+)操作利用了StringBuilder(或StringBuffer)的append方法实现,此时,对于上述情况,若s2,s3,s4采用String定义,拼接时需要额外创建一个StringBuffer(或StringBuilder),之后将StringBuffer转换为String;若采用StringBuffer(或StringBuilder),则不需额外创建StringBuffer。

StringBuilder

StringBuilder是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。

使用策略

  • 1) 基本原则:如果要操作少量的数据,用String ;单线程操作大量数据,用StringBuilder ;多线程操作大量数据,用StringBuffer。
  • 2) 不要使用String类的”+”来进行频繁的拼接,因为那样的性能极差的,应该使用StringBuffer或StringBuilder类,这在Java的优化上是一条比较重要的原则。例如:

当出现上面的情况时,显然我们要采用第二种方法,因为第一种方法,每次循环都会创建一个String result用于保存结果,除此之外二者基本相同.

  • 3) StringBuilder一般使用在方法内部来完成类似”+”功能,因为是线程不安全的,所以用完以后可以丢弃。StringBuffer主要用在全局变量中。
  • 4) 相同情况下使用 StirngBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。而在现实的模块化编程中,负责某一模块的程序员不一定能清晰地判断该模块是否会放入多线程的环境中运行,因此:除非确定系统的瓶颈是在 StringBuffer 上,并且确定你的模块不会运行在多线程模式下,才可以采用StringBuilder;否则还是用StringBuffer。

stringbuffer常用方法_Java 处理字符串常用的类:String StringBuilder StringBuffer相关推荐

  1. 【java学习】常用实体类--String、StringBuffer\StringTokenizer

    文章目录 参数传递 String String类有两个常用构造方法: 引用String常量 String类的常用方法 StringBuffer和StringBuilder StringBuilder中 ...

  2. String StringBuilder StringBuffer 包装类 Date 类 枚举类

    String,StringBuilder,StringBuffer直接的区别是: String 不可变长的字符序列 StringBuilder 可变长的字符序列,线程不安全的,效率较高 StringB ...

  3. String ,StringBuilder,StringBuffer的区分

    String ,StringBuilder,StringBuffer的区分 一.区别 String是字符串常量,而StringBuffer和StringBuilder是字符串变量.由String创建的 ...

  4. String StringBuilder StringBuffer三者之间的区别~~~

    String StringBuilder  StringBuffer三者之间的区别~~~ String是字符串常量,它是典型的immutable类,被声明final class,所有的属性都是fina ...

  5. String StringBuilder StringBuffer

    1,String 是不可变类 immutable 不可变类:所谓的不可变类是指这个类的实例一旦创建完成后,就不能改变其成员变量值.如JDK内部自带的很多不可变类:八大包装类和String等.     ...

  6. Java 集合 --- String, StringBuilder, StringBuffer

    Java 集合 --- String, StringBuilder, StringBuffer String String的声明方式 String的不可变性 对比两个String StringBuil ...

  7. String,Stringbuilder,Stringbuffer及正则表达式

    掌握String StringBuilder StringBuffer类的区别 一.String String是不可变类,一旦String对象被创建之后,包含对象中的字符串序列都是不可改变的,直到类被 ...

  8. String , StringBuilder , StringBuffer

    String 首先从String底层看起 从底层代码被final修饰,我们能看出来,String是只读字符串,他的成员方法也都默认为final方法.所以String所引用的字符串内容不能被改变 Str ...

  9. Java常用类(1)--字符串相关类String、StringBuffer、StringBuilder全面知识

    文章目录 String类 StringBuffer类 StringBuilder类 String:不可变的字符序列:底层使用char[]存储 StringBuffer:可变的字符序列:线程安全的,效率 ...

最新文章

  1. ajax-Ajax试题
  2. mysql二: 常用命令
  3. oracle日期相减工作日_Oracle 计算两个日期间隔的天数、月数和年数
  4. 大型电商网站的页面静态化方案是如何支撑亿级流量的?
  5. PPC(Pocket PC)中显示二进制数组(byte[])类型的图片
  6. Anaconda安装绘图模块altair
  7. java单元测试面试,Java必备!JUnit面试题和答案汇总
  8. azure夜校培训第5场 3月15日18:00---存储
  9. matlab制作强光效果代码,自己动手做一个雷达PPI显示器的动态效果图(附Matlab代码)...
  10. 怎么用手机查看WiFi密码?
  11. mysql句式增删改,MySQL 增删改语句
  12. 《欲罢不能:刷屏时代如何摆脱行为上瘾》书摘
  13. 富士施乐3300打印机驱动安装说明
  14. Excel:用VBA添加分页符
  15. 2021年安全生产模拟考试(全国特种作业操作证高处作业-高处安装维护拆除模拟考试题库二)安考星
  16. 多因子模型matlab,【干货】不可不知的N种量化策略模型——量化因子
  17. EOFError: Ran out of input
  18. 如何自学市场营销?推荐你看这本书
  19. 用python做一个文本翻译器,自动将中文翻译成英文,超方便的
  20. 英特尔平台安装黑苹果

热门文章

  1. 一文解析Apache Avro数据
  2. 通用时区:你应该知道的数据库时区知识
  3. 面向对象的Python编程,你需要知道这些!
  4. 【华为云技术分享】云小课 | 如何通过虚拟私有云保障服务安全
  5. 【我的物联网成长记2】设备如何进行选型?
  6. 基于华为云对话机器人技能平台的规则模板概述
  7. python将学号与成绩匹配_用Python运维网络(1):基础知识
  8. php yaf.dll,windows下配置nginx+php+yaf的环境
  9. php 抓取 wordpress 文字内容,如何抓取WordPress文章
  10. 红橙Darren视频笔记 builder设计模式+navigationBar导航条