String、StringBuilder、StringBuffer的区别和常用方法

目录

一,定义

1.1,String

1.2,StringBuilder

1.3,StringBuffer

1.4,三者区别

二,StringBuffer和StringBuilder常用方法

2.1,append()方法

2.2,delete()方法

 2.3,insert()方法

2.4,reverse()方法

2.5,replace()方法


一,定义

1.1,String

        对于String来说,是把数据存放在了常量池中,因为所有的String,默认都是以常量形式保存,且由final修饰,因此在线程池中它是线程安全的。因为每一个String当被创建好了以后,他就不再发生任何变化,但是它的执行速度是最差的。
        我们要创建String的时候,他在常量池中对这些信息进行处理,如果在程序中出现了大量字符串拼接的工作,效率是非常底下的。
        因此使用场景是在少量字符串操作的时候才建议直接使用String来操作。

示例代码:

        String str="aaa";
        System.out.println(str);
        str="bbb";
        System.out.println(str);

输出结果:

1.2,StringBuilder


        在进行多线程处理的时候,如果多个线程对于这一个对象同时产生操作,会产生预期之外的结果。对于StringBuilder来说,执行效率虽然高,但是因为线程不安全,所以不建议在多线程的环境下对同一个StringBuilder对象进行操作。
        因此StringBuilder适用于单线程环境下的大量字符串操作。

        String str="aaa"+"bbb";
        StringBuilder stringBuilder=new StringBuilder().append("abc").append("de");
        System.out.println(str);
        System.out.println(stringBuilder.toString());
        System.out.println(stringBuilder);

输出结果:

1.3,StringBuffer

        StringBuffer相对于StringBuilder效率要相对低一点,但也远比String要高的多。效率低的原因:对于StringBuffer来说更多的考虑到了多线程的情况,在进行字符串操作的时候,它使用了synchronize关键字,对方法进行了同步处理。
        因此StringBuffer适用于多线程环境下的大量操作。

1.4,三者区别

String 固定不可变字 符串StringBuffer 可变StringBuilder 可变
String的值是不可变 的,这就导致每次对 String的操作都会生 成新的String对象, 不仅效率低下,而且 浪费大量优先的内存 空间StringBuffer是可变类,和线程安全的字符串 操作类,任何对它指向的字符串的操作都不会 产生新的对象。每个StringBuffer对象都有一 定的缓冲区容量,当字符串大小没有超过容量 时,不会分配新的容量,当字符串大小超过容 量时,会自动增加容量可变类,速度 更快
不可变可变可变
线程安全线程不安全
多线程操作字符串单线程操作字符串

二,StringBuffer和StringBuilder常用方法

  • public StringBuffer append(String s) 将指定的字符串追加到此字符序列。
  • public StringBuffer reverse() 将此字符序列用其反转形式取代。
  • public StringBuilder delete(int start, int end) 移除此序列的子字符串中的字符。
  • public insert(int offset, int i) 将 int 参数的字符串表示形式插入此序列中。
  • insert(int offset, String str) 将 str 参数的字符串插入此序列中。
  • replace(int start, int end, String str) 使用给定 String 中的字符替换此序列的子字符串中的 字符。

2.1,append()方法

        添加字符串内容;

示例代码:

        StringBuilder stringBuilder=new StringBuilder("aaa");
        stringBuilder.append("bbb");
        System.out.println(stringBuilder);

输出结果:

2.2,delete()方法

        删除指定索引内字符串内容;

示例代码:

        StringBuilder stringBuilder=new StringBuilder("aabbaa");
        stringBuilder.delete(2,4);
        System.out.println(stringBuilder);

 输出结果:

 2.3,insert()方法

        在指定索引内添加字符串内容;

示例代码:

        StringBuilder stringBuilder=new StringBuilder("aabbaa");
        stringBuilder.insert(2,",");
        System.out.println(stringBuilder);

输出结果:

2.4,reverse()方法

        将字符串进行倒置;

示例代码:

        StringBuilder stringBuilder=new StringBuilder("abc");
        stringBuilder.reverse();
        System.out.println(stringBuilder);

输出结果:

2.5,replace()方法

        替换指定索引内字符串内容;

示例代码:

        StringBuilder stringBuilder=new StringBuilder("abcde");
        stringBuilder.replace(2,4,"k");
        System.out.println(stringBuilder);
        StringBuilder stringBuilder1=new StringBuilder("abcde");
        stringBuilder1.replace(2,2,"k");
        System.out.println(stringBuilder1);

输出结果:

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰冰很社恐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值