Java基础之StringBuffer类4月打卡day13

举报
java厂长 发表于 2022/04/13 08:53:06 2022/04/13
【摘要】 Java基础之StringBuffer类4月打卡day13关于作者作者介绍🍓 博客主页:作者主页🍓 简介:JAVA领域优质创作者🥇、一名在校大三学生🎓、在校期间参加各种省赛、国赛,斩获一系列荣誉🏆。🍓 关注我:关注我学习资料、文档下载统统都有,每日定时更新文章,励志做一名JAVA资深程序猿👨‍💻。StringBuffer类对于类库的学习,不可能全学完。你所需要知道就是如何面对...

Java基础之StringBuffer类4月打卡day13

关于作者

  • 作者介绍


🍓 博客主页:作者主页

🍓 简介:JAVA领域优质创作者🥇、一名在校大三学生🎓、在校期间参加各种省赛、国赛,斩获一系列荣誉🏆。

🍓 关注我:关注我学习资料、文档下载统统都有,每日定时更新文章,励志做一名JAVA资深程序猿👨‍💻。

StringBuffer类

对于类库的学习,不可能全学完。你所需要知道就是如何面对解决问题的方法。要学会查询文档。

StringBuffer类之前首先来简单回顾一下String类的特点:

String类的对象有两种实例化方式,一种是直接赋值,只会开辟一块堆内存空间,而且对象可以自动入池,另外一种方式使用构造方法完成,会开辟两块空间,有一块空间将称为垃圾,并且不会自动入池,但是可以通过intern()方法手工入池;

字符串常亮一旦声明则不能改变,而字符串对象可以改变,但是改变的是其内存地址的指向;

通过以上的几个特点就可以清楚的发现,String类是表示字符串使用最多的类,但是其不合适于被频繁修改的字符串操作上,所以在这种情况下,往往可以使用StringBuffer类,即:StringBuffer类方便用户进行内容的修改,在String类之中使用“+”作为数据库的连接操作,而在StringBuffer类之中使用append()方法进行数据的连接。

使用StringBuffer操作,StringBuffer内容可以改变。

package com.day13.demo;
​
public class BufferDemo {
    public static void main(String[] args) {
        StringBuffer buf = new StringBuffer();
        buf.append("hello").append(",world!");
        fun(buf);//修改了buf的内容
        System.out.println(buf);
    }
    public static void fun(StringBuffer tem){
        tem.append("\n").append("zsr");
    }
}

String和StringBuffer最大的区别就是:String的内容无法修改,而StringBuffer的内容可以修改。但是在开发的选择还是优先选择String类。

现在学习的字符串的操作类就有两个了:String,StringBuffer,那么下面通过这两个类的定义来研究一下关系:

String类: StringBuffer类:
public final class String extends Object implements Serializable,Comparable<String>,CharSequence public final class StringBuffer extends Object implements Serializable, CharSequence

可以发现两个类都是“CharSequence”接口的子类。这个接口描述的是字符集,所以串就属于字符集的子类,如果以后看见CharSequence最简单的联想就是字符串。但是有一个小小的问题需要注意一下就是String和StringBuffer两个类型无法直接转换。

利用StringBuffer:利用StringBuffer构造方法、append()方法

将String变为StringBuffer

1.直接利用StringBuffer类的构造方法,public StringBuffer(String str)

package com.day13.demo;
​
public class BufferTest{
    public static void main(String[] args) throws Exception {
        String str = "Hello World.";
        StringBuffer buf = new StringBuffer(str);
        fun(buf);
        System.out.println(buf);
}
    private static void fun(StringBuffer temp) {
        temp.append("\n").append("zsr");
    }
}
​

2.利用StringBuffer类的append()方法

package com.day13.demo;
​
public class BufferTest{
    public static void main(String[] args) throws Exception {
        String str = "Hello World.";
        StringBuffer buf = new StringBuffer();
        buf.append(str);
        fun(buf);
        System.out.println(sb);
    }
    private static void fun(StringBuffer temp) {
        temp.append("\n").append("zsr");
    }
}
​

将StringBuffer变成String,利用StringBuffer类的toString()方法完成

package com.day13.demo;
​
public class BufferTest{
    public static void main(String[] args) throws Exception {
        StringBuffer buf = new StringBuffer("hello,World!");
        String str = buf.toString();
        System.out.println(str);
    }
}

实际上StringBuffer还是有一些String类所没有的特点的。

1.字符串反转操作,public StringBuffer reverse()

package com.day13.demo;
​
public class BufferTest{
    public static void main(String[] args) throws Exception {
        StringBuffer buf = new StringBuffer("hello,World!");
        System.out.println(buf.reverse());
    }
}

2.删除指定范围内的数据,public StringBuffer delete(int start, int end)

package com.day13.demo;
​
public class BufferDemo {
    public static void main(String[] args) {
        StringBuffer buf = new StringBuffer("Hello,World!");
        System.out.println(buf.delete(5, 11));
    }
}

3.插入数据的方法, public StringBuffer insert(int offset, Object obj)

package com.day13.demo;
​
public class BufferDemo {
    public static void main(String[] args) {
        StringBuffer buf = new StringBuffer("Hello,World!");
        System.out.println(buf.delete(5,11).insert(0, "你好,"));
    }
}

面试题:请解释String、StringBuffer、StringBuilder的区别?

  • String的内容不可以修改,StringBuffer与StringBuilder内容可以修改

  • StringBuffer采用同步处理属于线程安全操作,StringBuilder采用异步处理属于线程不安全操作。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。