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 编译器 ice
【Java开发指南 | 第十五篇】Java Character 类、String 类
【Java开发指南 | 第十五篇】Java Character 类、String 类
13 1
|
9小时前
|
安全 Java 编译器
Java中String、StringBuilder和StringBuffer的区别
Java中String、StringBuilder和StringBuffer的区别
10 1
|
9小时前
|
存储 缓存 安全
【 Java中String源码分析(JVM视角你不来看看?】
【 Java中String源码分析(JVM视角你不来看看?】
14 0
|
9小时前
|
安全
String、StringBuuffer、StringBuilder三者的区别
String、StringBuuffer、StringBuilder三者的区别
|
9小时前
|
Java
Java String类型转换成Date日期类型
Java String类型转换成Date日期类型
|
10小时前
|
安全 Java 调度
深入理解Java并发编程:线程安全与性能优化
【5月更文挑战第12天】 在现代软件开发中,多线程编程是提升应用程序性能和响应能力的关键手段之一。特别是在Java语言中,由于其内置的跨平台线程支持,开发者可以轻松地创建和管理线程。然而,随之而来的并发问题也不容小觑。本文将探讨Java并发编程的核心概念,包括线程安全策略、锁机制以及性能优化技巧。通过实例分析与性能比较,我们旨在为读者提供一套既确保线程安全又兼顾性能的编程指导。
|
9小时前
|
Java
Java中的多线程编程:基础知识与实践
【5月更文挑战第13天】在计算机科学中,多线程是一种使得程序可以同时执行多个任务的技术。在Java语言中,多线程的实现主要依赖于java.lang.Thread类和java.lang.Runnable接口。本文将深入探讨Java中的多线程编程,包括其基本概念、实现方法以及一些常见的问题和解决方案。
|
9小时前
|
安全 算法 Java
深入理解Java并发编程:线程安全与性能优化
【5月更文挑战第13天】 在Java开发中,并发编程是一个复杂且重要的领域。它不仅关系到程序的线程安全性,也直接影响到系统的性能表现。本文将探讨Java并发编程的核心概念,包括线程同步机制、锁优化技术以及如何平衡线程安全和性能。通过分析具体案例,我们将提供实用的编程技巧和最佳实践,帮助开发者在确保线程安全的同时,提升应用性能。
10 1
|
10小时前
|
Java 调度
Java一分钟之线程池:ExecutorService与Future
【5月更文挑战第12天】Java并发编程中,`ExecutorService`和`Future`是关键组件,简化多线程并提供异步执行能力。`ExecutorService`是线程池接口,用于提交任务到线程池,如`ThreadPoolExecutor`和`ScheduledThreadPoolExecutor`。通过`submit()`提交任务并返回`Future`对象,可检查任务状态、获取结果或取消任务。注意处理`ExecutionException`和避免无限等待。实战示例展示了如何异步执行任务并获取结果。理解这些概念对提升并发性能至关重要。
17 5