《StringBuffer与StringBuilder阐释》

2023-10-15 05:10

本文主要是介绍《StringBuffer与StringBuilder阐释》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

                                             StringBuffer

一 StringBuffer基本介绍:

1)java.lang.StringBuffer 代表可变的字符序列,可以对字符串的内容进行增删。

2)很多方法与 String 相同,但是StringBuffer是可变长度的

3)StringBuffer是一个容器

二 String Vs StringBuffer

1)String 保存的是字符串常量,里面的值不能更改,每次 String 类的更新实际上就是更改地址,效率更低。// private final char[ ] value

2) StringBuffer 保存的是字符串变量,里面的值可以修改,每次 StringBuffer 的更新实际上可以更新内容,不用每次更新地址,效率更高。 // char[ ] value 这个放在堆。

3) StringBuffer 有扩容机制,当分配的内存地址空间不够时,才会重新分配新的地址,扩大范围,效率更高。

三:StringBuffer的构造器

1)StringBuffer()

构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。

2)StringBuffer(int capacity) //capacity 容量

构造一个不带字符,但具有指定初始容量的字符串缓冲区。即对 char[ ] 大小进行指定

3 ) StringBuffer(String str)

构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。

 四:String 和 StringBuffer 相互转换

在开发中,我们常要将 String 和 StringBuffer 相互转化,看看如何实现

分别都是两种方法。

 五:StringBuffer的常用方法。

1) 增 append

2)减 delete

3)改 replace

4)查 indexOf

5)插 insert

 六: StringBuffer 练习题

1. 下面程序的输出结果是?

 2. 实现输入产品名称,价格并输出,要求价格从小数点起三位以“,”分隔。例如 价格输入为1234567.82 ,输出 1,234,567.82    输入45213.86  输出 45,213.86

                                         StringBuilder

一:基本介绍

1)一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步(StringBulider 不是线程安全)。此类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类,因为在大多数实践中,它比 StringBuffer 更快。

2)在StringBuilder 上的主要操作是 append 和 insert 方法,可以重载这些方法,以接收任意类型的数据。

注意:StringBuilder 的方法,没有做互斥的处理,即没有 synchronized 关键字,因此在单线程的基础下使用 StringBuilder。 

二:StringBuilder 与 String、StringBuffer的比较

1)StringBuilder与StringBuffer 非常类似,均代表可变的字符序列,而且方法也一样。

2)String :不可变字符序列,效率低,但是复用率高。(即一个常量池中不可能创建两个一模一样的字符串常量)

3)StringBuffer :可变字符序列,效率较高(增删)、线程安全,看源码。

4)StringBuilder :可变字符序列,效率最高、线程不安全。

5)String使用注意说明:

     String s = “a”;//创建了一个字符

    s+= "b" //实际上原来的字符串对象已经丢弃了,现在又产生了一个新的字符串对象“ab”。如果多次执行这些改变字符串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。如果这样的操作放在循环中,会极大的影响程序的性能 => 结论:如果我们对 String 做大量的修改,不要使用 String

7) 三者效率对比  :

结论:  StringBuilder > StringBuffer > String

 三:StringBuilder 与 String、StringBuffer的使用原则

1)如果字符串存在大量的修改操作,一般使用 StringBuffer 或 StringBuilder

2)如果字符串存在大量的修改操作,并且单线程的情况, 使用 StringBuilder

3)如果字符串存在大量的修改操作,并且多线程的情况,使用 StringBuffer

4)如果字符串很少被修改,被多个对象引用,使用 String,比如配置信息等

这篇关于《StringBuffer与StringBuilder阐释》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/215516

相关文章

java中的String类型与StringBuffer类型的区别

String源码剖析 private final byte[] value; 通过查看string类型的源码,我们可以知道String类的底层还是使用了数组来存储字符串,这里是被final修饰的数组的引用,表示这个数组一旦被赋给了初值之后,数组引用就不能修改了,只能指向最初给的那块内存地址,但是字符串中的内容是可以改变的。 下面我画图来展示一下它在内存中的存储结构 String类创

string,stringBuffer,stringBuilder性能分析

一般情况下三者的速度快慢是这样的:stringBuilder>stringBuffer>string。 当经常更改字符串的内容时, stringBuffer的性能比string更快一些 stringBuffer>string

Java实用类——StringBuffer类和StringBuilder类

StringBuffer类和StringBuilder类位于java.util包中,是String类的增强型,提供了很多方法可供使用 StringBuffer和StringBuilder出现的原因是:使用+拼接字符串会浪费大量内存空间 String a = "Hello";a = a + "chmy"; 新的a指向hellochmy 静态常量池中多了两个字符串hello和chmy

Java详解String 字符串类以及String内存原理、StringBuilder类、StringJoiner类(附有代码+案例)

文章目录 九.String 字符串类型9.0 String概述9.1 字符串常用方法9.2 String内存图9.2.1直接赋值9.2.2new出来 9.3字符串比较9.4 字符串遍历9.4.1 统计字符串大小写及数字9.4.2 拼接字符串9.4.3字符串反转 9.5 StringBuilder类9.5.1StringBuilder 构造方法9.5.2StringBuilder常用方法9.5

StringBuffer 的使用

StringBuffer sb = new StringBuffer("Hello "); sb.append("world");   //在sb尾部追加一个字符串, 此时变成 Hello world; sb.charAt(1) ;  //返回下标为1的字符 此处是 e sb.insert(1,"d");  //在 1 处插入新的字符串 d  此时变为 Hedllo world;

String、StringBuilder与StringBuffer的使用总结

1、String       String是Java中基础且重要的类,并且String也是Immutable类的典型实现,被声明为final class,除了hash这个属性其它属性都声明为final,因为它的不可变性,所以例如拼接字符串时候会产生很多无用的中间对象,如果频繁的进行这样的操作对性能有所影响。 我们平日开发通常情况下少量的字符串拼接其实没太必要担心,例如 String str

Java中的String与StringBuilder详解

“好读书,不求甚解;每有会意,便欣然忘食。” 文章目录 前言文章有误敬请斧正 不胜感恩! Java中的String与StringBuilder详解:1. String与StringBuilder简介2. 字符串转换为StringBuilder3. StringBuilder转换为字符串4. 字符串拼接5. 格式化字符串6. 字符串操作:插入、删除、替换7. 性能对比:String v

java学习笔记StringBuffer/StringBuilder及基本数据类型

一、StringBuffer概述 StringBuffer是字符串缓冲区,是一个容器。(create、update、read、delete)CURD StringBuffer是线程安全的可变字符序列。可安全的用于多个线程。 面盆理论:添加多少东西,盆还是一个盆。其本身对象不变。 字符串缓冲区(StringBuffer)的特点: 1、长度是可变化的。 2、可以直接操作多个数据类型。

JAVA学习笔记——StringBuffer和StringBuilder类

1 、StringBuffter类 (1). StringBuffer和String的区别? 答:前者长度和内容可变,后者不可变。如果用前者做字符串的拼接,不会浪费太多的资源。 (2). StringBuffer的构造方法:     public StringBuffer() : 无参构造方法     public StringBuffer(int capacity) : 指定容量的字符

StringBuilder 与 StringBuffer之默认大小与扩容

1、StringBuilder 与 StringBuffer StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。 2、区别 StringBuffer 和 StringBuilder 区别在于,StringBuffer 是线程安全,StringBuilder 反之。 3、初始化大小 这里以StringBuffer说明。