Java八大常用类(四) StringBuffer和StringBuilder类

简介: StringBuffer和StringBuilder 非常类似,均代表可变的字符序列。这两个类都是抽象类的,方法一模一样StringBuffer线程安全,做线程同步检查,效率低StringBuilder线程不安全,不做线程同步检查,效率较高,建议使用该类StringBuilder的使用速度对比:package oop2.demo06;public class StringF { public static void main(String[] args) { String str = "bnu"; StringBuilder bui

StringBuffer和StringBuilder 非常类似,均代表可变的字符序列。这两个类都是抽象类的,方法一模一样

StringBuffer线程安全,做线程同步检查,效率低

StringBuilder线程不安全,不做线程同步检查,效率较高,建议使用该类

StringBuilder的使用

速度对比:

package oop2.demo06;
public class StringF {
    public static void main(String[] args) {
        String str = "bnu";
        StringBuilder builder = new StringBuilder();
        long l = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            //str = str.concat("sxt");
            //builder.append("sxt");
        }
        long l1 = System.currentTimeMillis();
        System.out.println(l1-l);     //查看运行的时间,用以对比StringBuilder 和String运行的速度
    }
}
一些常用方法:
package oop2.demo06;
public class StringG {
    public static void main(String[] args) {
        //String s = "bnu";
        StringBuilder builder = new StringBuilder("bnu");
        builder.append("北京师范大学");     //内容追加的方法 ,常用。
        builder.insert(0,"BNU");   //指定的位置插入字符串。数组下标从0开始
        char c = builder.charAt(2);   //取出指定下标字符
        builder.setCharAt(3,'J');    //设置指定位置的的字符
        builder.replace(0,4,"北师大");    //进行指定位置的字符替换  [0,4)
        builder.deleteCharAt(3);  //删除指定位置字符
        builder.delete(1,3);   //删除多个字符 [1, 3)
        builder.reverse();   //倒序输出字符串
        System.out.println(builder);
        System.out.println(c);
        //String类型与  StringBuilder类 互转
        String str = "bnu";
        StringBuilder stringBuilder = new StringBuilder(str);
        String s = stringBuilder.toString();
    }
}

一些面试题

StringBuilder 底层默认char数组长度为16

StringBuilder 底层的扩容机制 是 : 原有的数组长度*2+2

package oop2.demo06;
public class StringL {
    public static void main(String[] args) {
        String str = "abcd";
        String a = "a";
        String b = "b";
        String c = "c";
        String d = "d";
        //字符串拼接的时候,如果全部是常量 ,和直接写一个结果的含义是一样的
        String str2 = "a" + "b" + "c" + "d";    //创建了几个对象?  1个
        String str3 = a+b+c+d;     //创建了1个对象
        //只要含有变量的连接,采用的就是优化的机制:
        StringBuilder builder = new StringBuilder();
        builder.append(a);
        builder.append(b);
        builder.append(c);
        builder.append(d);
        System.out.println(str==str2);  //true
        System.out.println(str2==str3);  //false
    }
}
相关文章
|
2月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
114 4
|
2月前
|
IDE JavaScript Java
在Java 11中,如何处理被弃用的类或接口?
在Java 11中,如何处理被弃用的类或接口?
204 5
|
2月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
196 1
|
2月前
|
Java Go 开发工具
【Java】(8)正则表达式的使用与常用类分享
正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
244 1
|
2月前
|
存储 Java 程序员
【Java】(6)全方面带你了解Java里的日期与时间内容,介绍 Calendar、GregorianCalendar、Date类
java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
198 1
|
Java
Java---StringBuffer()方法的简单应用
Java---StringBuffer()方法的简单应用
210 0
|
Java
Java---StringBuffer()方法的简单应用
描述:在实际应用中,经常回遇到对字符串进行动态修改。这时候,String类的功能受到限制,而StringBuffer类可以完成字符串的动态添加、插入和替换等操作。 1、构造函数。
763 0
|
2月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
217 1
|
3月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
168 0