Java中StringBuffer和StringBuilder

StringBuffer和StringBuilder

一、StringBuffer的基本方法

StringBuffer 用于表示可以修改的字符串

1、构造方法。

StringBuffer sb1=new StringBuffer();//分配了长16字节的字符缓冲区
StringBuffer sb2=new StringBuffer(512);//分配了512字节的字符缓冲区
StringBuffer sb3=new StringBuffer("大家好");

在字符缓冲区中存放字符串"大家好",另外,后面再留了16字节的空缓冲区。

2、常用方法。

// 字符设置和替换
// setCharAt(int index,char ch),将指定的字符ch放到index指出的位置。
// charAt(int index) 获得指定位置的字符
StringBuffer s1 = new StringBuffer("java");
s1.setCharAt(1, 'u');// 则s为"juva"

// 字符的插入
// insert(int offset,char ch),在offset位置插入字符ch。
StringBuffer s2 = new StringBuffer("wecome");
s2.insert(2, 'l');// 则s为"welcome"

// 在字符串末尾添加内容(Append方法)
StringBuffer s3 = new StringBuffer("中国");
s3.append("好");// 则s为"中国好"。
// 转换为不变字符串:toString()。
System.out.println(s3.toString());

// 获取字符串的长度: length()
StringBuffer s4 = new StringBuffer("abc");
System.out.println(s4.length());

// 获取字符串的容量
System.out.println(s4.capacity());

// 字符串反转
s4.reverse();
System.out.println(s4.toString());

// 删除指定字符串着中的字符
// delete(int start,int end)
StringBuffer s5 = new StringBuffer("Hello");
s5.delete(0, s5.length()); // 删除字符串s的全部字符
System.out.println(s5.toString());
        
// deleteCharAt(int index)
StringBuffer s6 = new StringBuffer("Hello");
s6.deleteCharAt(4); // 删除字符串s索引为4的字符
System.out.println(s6.toString());

// 替换字符串
// replace(int start,int end,String str)
StringBuffer s7 = new StringBuffer("Hello");
s7.replace(0, 1, "qqq");
System.out.println(s7.toString());

// substring(int start) //返回从start下标开始以后的字符串
StringBuffer s8 = new StringBuffer("Hello");
s8.substring(2);
System.out.println(s8.toString());
        
// substring(int start,int end) //返回从start到 end-1字符串
StringBuffer s9 = new StringBuffer("Hello");
s9.substring(2,3);
System.out.println(s9.toString());

二、StringBuilder,StringBuffer和StringBuilder的区别

StringBuilder和StringBuffer的方法是一样,区别是StringBuffer是线程安全,一个StringBuilder不是,你可以查看一下两个类的源码,StringBuffer的方法前面有synchronized关键字修饰。这个以后我们在讲解线程的时候会讲到。这里我们知道一下两者的区别即可:

StringBuffer线程同步,所以使用起来比较安全,但是效率较低主要是多线程和操作比较频繁是有有所体现。

StringBuilder正好相反不同步,效率高,但是多线程使用时可能会有问题。

三、String和StringBuffer的区别

1、String的不变性

 

当字符串string在内存中创建后,就不会再改变,所以对该字符串进行的所有改变操作,实际上都没有改变原来的字符串,你可以参考一下我们第一节,不过我们调用了原始的String的多少个方法,其实对原来的字符都不会有任何改变,都是重新生成一个新的字符串作为返回值,这就是所谓的Java String的不变性。

每一次的修改操作都会生成一个新的字符串,有一个不好的点——慢慢地消耗了内存,对GC来说也是非常费时的一件事,效率非常低,所以如果我们需要多次改变创建的字符串的话,那么使用String将会是个很不好的选择。

2、String与StringBuffer的区别

真是因为String是的不变性,StringBuffer或者StringBuilder就有他们的用武之地了,当然String有它的优点,就是使用方便,我们如何做出选择呢?一般如果字符串经常要做出修改,比如经常要拼接,删除等等,那么使用StringBuffer或者StringBuilder比较好,你可以在完成操作后使用toString方法转换为String类。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaStringBufferStringBuilder类是用于字符串操作的可变字符序列类。它们都具有类似的功能,但在某些方面有所不同。StringBuffer是线程安全的,适用于多线程环境下的字符串拼接和修改操作。而StringBuilder是非线程安全的,适用于单线程环境下的字符串操作,它的性能相对较高。 StringBufferStringBuilder类都提供了类似的方法,包括创建、追加、插入、删除、替换、反转等操作。可以使用append()方法在字符串末尾追加内容,使用insert()方法在指定位置插入内容,使用delete()方法删除指定位置的字符,使用replace()方法替换指定范围内的字符,使用reverse()方法反转字符串等。此外,它们还支持toString()方法将可变字符序列转换为字符串,以及length()方法获取字符序列的长度等常见操作。 在使用StringBufferStringBuilder类时,需要根据实际情况选择合适的类。如果在多线程环境下进行字符串操作,安全性是首要考虑因素,可以使用StringBuffer类。如果在单线程环境下进行字符串操作,并且对性能有较高要求,可以使用StringBuilder类。 总之,JavaStringBufferStringBuilder类提供了灵活和高效的字符串操作方法,可以根据需要选择合适的类来处理字符串。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Java StringBufferStringBuilder](https://blog.csdn.net/sheng0113/article/details/124081818)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [面试题java StringBufferStringBuilder类常见操作和用法](https://download.csdn.net/download/qq_43797491/87906515)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值