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
    }
}
相关文章
|
1天前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
13 6
|
3天前
|
IDE Java 编译器
Java:如何确定编译和运行时类路径是否一致
类路径(Classpath)是JVM用于查找类文件的路径列表,对编译和运行Java程序至关重要。编译时通过`javac -classpath`指定,运行时通过`java -classpath`指定。IDE如Eclipse和IntelliJ IDEA也提供界面管理类路径。确保编译和运行时类路径一致,特别是外部库和项目内部类的路径设置。
|
2天前
|
安全 Java 测试技术
Java零基础-StringBuffer 类详解
【10月更文挑战第9天】Java零基础教学篇,手把手实践教学!
9 2
|
3天前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其独特的“不重复性”要求,彻底改变了处理唯一性约束数据的方式。
【10月更文挑战第14天】从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其独特的“不重复性”要求,彻底改变了处理唯一性约束数据的方式。本文深入探讨Set的核心理念,并通过示例代码展示了HashSet和TreeSet的特点和应用场景。
8 2
|
3天前
|
存储 Java 索引
Java 中集合框架的常见接口和类
【10月更文挑战第13天】这些只是集合框架中的一部分常见接口和类,还有其他一些如 Queue、Deque 等接口以及相关的实现类。理解和掌握这些集合的特点和用法对于高效编程非常重要。
|
5月前
|
安全 Java
Java StringBuffer 和 StringBuilder 类
Java StringBuffer 和 StringBuilder 类
44 0
|
2月前
|
安全 Java API
Java系类 之 String、StringBuffer和StringBuilder类的区别
这篇文章讨论了Java中`String`、`StringBuffer`和`StringBuilder`三个类的区别,其中`String`是不可变的,而`StringBuffer`是线程安全的可变字符串类,`StringBuilder`是非线程安全的可变字符串类,通常在单线程环境下性能更优。
Java系类 之 String、StringBuffer和StringBuilder类的区别
|
2月前
|
安全 Java
【Java基础面试二十七】、说一说StringBuffer和StringBuilder有什么区别
这篇文章介绍了Java中StringBuffer和StringBuilder的区别:StringBuffer是线程安全的,而StringBuilder是非线程安全的,因此在单线程环境下优先推荐使用StringBuilder以获得更好的性能。
|
2月前
|
API C# 开发者
WPF图形绘制大师指南:GDI+与Direct2D完美融合,带你玩转高性能图形处理秘籍!
【8月更文挑战第31天】GDI+与Direct2D的结合为WPF图形绘制提供了强大的工具集。通过合理地使用这两种技术,开发者可以创造出性能优异且视觉效果丰富的WPF应用程序。在实际应用中,开发者应根据项目需求和技术背景,权衡利弊,选择最合适的技术方案。
87 0
|
5月前
|
存储 Java
Java基础复习(DayThree):字符串基础与StringBuffer、StringBuilder源码研究
Java基础复习(DayThree):字符串基础与StringBuffer、StringBuilder源码研究
Java基础复习(DayThree):字符串基础与StringBuffer、StringBuilder源码研究