45 java常用类_7 _StringBuffer与StringBuilder

45 java常用类_7 _StringBuffer与StringBuilder

1.可变字符串StringBuffer与StringBuilder

  1. StringBuffer:可变长字符串,JDK1.0提供,运行效率慢(比String快),线程安全 (buffer:缓冲区)
  2. StringBuilder:可变长字符串,JDK5.0提供,运行效率快,线程不安全(单线程选择StringBuilder)
  3. 和String区别:(1)比String效率高、(2)比String节省内存
  4. 相当于String增强类
  5. 方法:
    • append();添加
    • insert(); 添加,插入,可指定位置 (要注意位置范围0 ~ stringBuffer.length())
    • reverse();//反转
    • delete(); 删除,有起始与结束下标(含头不含尾)

代码如下:

package com.wlw.common_class.string;
/*
StringBuffer 与 StringBuilder的使用是一样的(**)
*/

public class Demo04 {
    public static void main(String[] args) {
        
        //StringBuffer sb = new StringBuffer();
        StringBuilder sb = new StringBuilder();

        //1.append();添加
        sb.append("java世界第一");
        System.out.println(sb);

        sb.append("java真香");
        System.out.println(sb);

        sb.append("java不错");
        System.out.println(sb);
        System.out.println(sb.length());

        //2.insert(); 添加,插入,可指定位置 (要注意位置范围0 ~ stringBuffer.length())
        sb.insert(0,"我在最前面");
        System.out.println(sb);
        System.out.println(sb.length());

        sb.insert(sb.length(),"我在最后面");
        System.out.println(sb);
        System.out.println(sb.length());

        //3.replace(); 替换 ,有起始与结束下标(含头不含尾)
        sb.replace(0, 5, "hello");
        System.out.println(sb.toString());

        //反转
        sb.reverse();
        System.out.println(sb.toString());

        //4.delete(); 删除,有起始与结束下标(含头不含尾)
        sb.delete(0,5);
        System.out.println(sb.toString());

        sb.delete(0,sb.length());//清空
        System.out.println(sb.length());
    }
}
/*
执行结果:
java世界第一
java世界第一java真香
java世界第一java真香java不错
20
我在最前面java世界第一java真香java不错
25
我在最前面java世界第一java真香java不错我在最后面
30
hellojava世界第一java真香java不错我在最后面
面后最在我错不avaj香真avaj一第界世avajolleh
错不avaj香真avaj一第界世avajolleh
0

Process finished with exit code 0

*/

2.StringBuffer是如何实现线程安全的呢?

2.1StringBuffer类中实现的方法:

在这里插入图片描述

2.2StringBuilder类中实现的方法:

在这里插入图片描述

由此可见,StringBuffer类中的方法都添加了synchronized关键字,也就是给这个方法添加了一个锁,用来保证线程安全。

3.验证 StringBuffer StringBuilder效率高于String:

代码如下:

package com.wlw.common_class.string;

/*
验证 StringBuffer StringBuilder效率高于String
 */
public class Demo05 {

    public static void main(String[] args) {
        stringTime();
        stringBufferTime();
        stringBuilderTime();
    }

    public static void stringTime(){
        long start = System.currentTimeMillis();
        String s = "";

        for (int i = 0; i < 10000; i++) {
            s += i;
        }
        //System.out.println(s);

        long end = System.currentTimeMillis();
        System.out.println("String用时:"+(end-start));
    }

    public static void stringBufferTime(){
        long start = System.currentTimeMillis();
        StringBuffer sb = new StringBuffer("");

        for (int i = 0; i < 10000; i++) {
            sb.append(i);
        }

        //System.out.println(sb);

        long end = System.currentTimeMillis();
        System.out.println("StringBuffer用时:"+(end-start));
    }
    
    public static void stringBuilderTime(){
        long start = System.currentTimeMillis();
        StringBuilder sb = new StringBuilder("");

        for (int i = 0; i < 10000; i++) {
            sb.append(i);
        }

        //System.out.println(sb.toString());

        long end = System.currentTimeMillis();
        System.out.println("StringBuilder用时:"+(end-start));
    }
}
/*
执行结果:
    String用时:352
    StringBuffer用时:15
    StringBuilder用时:1
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

悬浮海

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

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

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

打赏作者

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

抵扣说明:

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

余额充值