Java String、StringBuffer 和 StringBuilder 的区别和理解(二)

简介: Java String、StringBuffer 和 StringBuilder 的区别和理解(二)

StringBuffer


接口文档:详情可自行查看



StringBuffer 的特点

StringBuffer 类的对象可被多次修改,且对 StringBuffer 对象本身操作;

StringBuffer 类使用 synchronized 同步修饰方法,线程安全。


StringBuffer 的构造方法

StringBuffer():构造一个没有字符的字符串缓冲区,初始容量为16字符;

StringBuffer(String str):构造一个初始化为指定内容的字符串缓冲区;

StringBuffer(int capacity):构造一个没有字符的字符串缓冲区和指定的初始容量;

实例:

/* 构造方法 */
// 构造一个没有字符的字符串缓冲区,初始容量为16
StringBuffer sb1 = new StringBuffer();
System.out.println(sb1.capacity()); // 16
System.out.println(sb1.length()); // 0
// 构造一个指定字符串的字符串缓冲区,容量 = 16(初始容量) + 字符串长度
StringBuffer sb2 = new StringBuffer("Java");
System.out.println(sb2.capacity()); // 20 = 16 + 4
System.out.println(sb2.length());  // 4
// 构造指定容量的字符串缓冲区
StringBuffer sb3 = new StringBuffer(12);
System.out.println(sb3.capacity()); // 12
System.out.println(sb3.length()); // 0


StringBuffer 的常用方法

append(): 追加,在字符串末尾添加;

delete():删除,删除指定索引处的字符;

replace():替换,用指定的String中的字符替换子字符串中的String;

reverse():反转;

substring():截取返回一个新的 String,它包含此序列当前所包含的字符子序列

insert():插入,指定位置插入字符串;

/* 常用方法 */
StringBuffer str1 = new StringBuffer("I love ");
// append(): 追加
System.out.println("append()前str1: " + str1);  // I love
str1.append("Java!");
System.out.println("append()后str1: " + str1);  // I love Java!
// delete(): 删除
System.out.println("delete()前str1: " + str1);  // I love Java!
str1.delete(3, 5);
System.out.println("delete()后str1: " + str1);  // I le Java!
// replace(): 替换
System.out.println("replace()前str1: " + str1);  // I le Java!
str1.replace(1, 4, "*******");
System.out.println("replace()后str1: " + str1);  // I******* Java!
// reverse(): 反转
System.out.println("reverse()前str1: " + str1);  // I******* Java!
str1.reverse();
System.out.println("reverse()后str1: " + str1);  // !avaJ *******I
// substring(): 截取
System.out.println("substring()前str1: " + str1);  // !avaJ *******I
String str2 = str1.substring(3, 8);
System.out.println("substring()后str1: " + str2);  // aJ **
// insert(): 插入
System.out.println("insert()前str1: " + str1);  // !avaJ *******I
str1.insert(3, "hahaha");
System.out.println("insert()后str1: " + str1);  // !avhahahaaJ *******I

运行结果:

append()前str1: I love 
append()后str1: I love Java!
delete()前str1: I love Java!
delete()后str1: I le Java!
replace()前str1: I le Java!
replace()后str1: I******* Java!
reverse()前str1: I******* Java!
reverse()后str1: !avaJ *******I
substring()前str1: !avaJ *******I
substring()后str1: aJ **
insert()前str1: !avaJ *******I
insert()后str1: !avhahahaaJ *******I

构造方法


public static void main(String[] args){
            /* 构造方法 */
            // 构造一个没有字符的字符串缓冲区,初始容量为16
            StringBuffer sb1 = new StringBuffer();
            System.out.println(sb1.capacity()); // 16
            System.out.println(sb1.length()); // 0
            // 构造一个指定字符串的字符串缓冲区,容量 = 16(初始容量) + 字符串长度
            StringBuffer sb2 = new StringBuffer("Java");
            System.out.println(sb2.capacity()); // 20 = 16 + 4
            System.out.println(sb2.length());  // 4
            // 构造指定容量的字符串缓冲区
            StringBuffer sb3 = new StringBuffer(12);
            System.out.println(sb3.capacity()); // 12
            System.out.println(sb3.length()); // 0
            /* 常用方法 */
            StringBuffer str1 = new StringBuffer("I love ");
            // append(): 追加
            System.out.println("append()前str1: " + str1);  // I love
            str1.append("Java!");
            System.out.println("append()后str1: " + str1);  // I love Java!
            // delete(): 删除
            System.out.println("delete()前str1: " + str1);  // I love Java!
            str1.delete(3, 5);
            System.out.println("delete()后str1: " + str1);  // I le Java!
            // replace(): 替换
            System.out.println("replace()前str1: " + str1);  // I le Java!
            str1.replace(1, 4, "*******");
            System.out.println("replace()后str1: " + str1);  // I******* Java!
            // reverse(): 反转
            System.out.println("reverse()前str1: " + str1);  // I******* Java!
            str1.reverse();
            System.out.println("reverse()后str1: " + str1);  // !avaJ *******I
            // substring(): 截取
            System.out.println("substring()前str1: " + str1);  // !avaJ *******I
            String str2 = str1.substring(3, 8);
            System.out.println("substring()后str1: " + str2);  // aJ **
            // insert(): 插入
            System.out.println("insert()前str1: " + str1);  // !avaJ *******I
            str1.insert(3, "hahaha");
            System.out.println("insert()后str1: " + str1);  // !avhahahaaJ *******I
        }


运行结果:

16
0
20
4
12
0
append()前str1: I love 
append()后str1: I love Java!
delete()前str1: I love Java!
delete()后str1: I le Java!
replace()前str1: I le Java!
replace()后str1: I******* Java!
reverse()前str1: I******* Java!
reverse()后str1: !avaJ *******I
substring()前str1: !avaJ *******I
substring()后str1: aJ **
insert()前str1: !avaJ *******I
insert()后str1: !avhahahaaJ *******I
相关文章
|
9月前
|
存储 安全 Java
String StringBuffer StringBuilder 区别详解与对比分析
本文详细解析了Java中String、StringBuffer和StringBuilder的区别,从可变性、线程安全性和性能三个方面进行对比,并结合具体应用场景分析了三者的适用范围。通过性能测试示例展示了它们在字符串拼接时的效率差异,同时提供了实际代码案例帮助理解。总结指出,String适合少量操作或线程安全场景,StringBuffer适用于多线程环境,而StringBuilder则在单线程下性能最优。开发者应根据需求选择合适的类以优化程序性能。文末还附有相关面试资料供参考。
1235 2
|
5月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
267 1
|
5月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
284 1
|
6月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
246 0
|
6月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
434 16
|
7月前
|
缓存 并行计算 安全
关于Java多线程详解
本文深入讲解Java多线程编程,涵盖基础概念、线程创建与管理、同步机制、并发工具类、线程池、线程安全集合、实战案例及常见问题解决方案,助你掌握高性能并发编程技巧,应对多线程开发中的挑战。