【Java数据类型】“字符串”全解之“StringBuffer类和StringBuilder类”

【Java基础】11.String类,StringBuffer和StringBuilder拼接字符串 字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。 阅读详情

在上一篇讲解字符串类String的文章中:

点击查看:【Java数据类型】“字符串”全解之“String类”

详解了String类对于字符串的构造方法、功能API、基本数据类型与String类的转换,对Java语言中对于字符串的理解和使用有一定的认识与理解,在这篇文章中,我将继续阐述其他两种字符串相关类:StringBuffer和StringBuilder。

StringBuffer

StringBuffer字符串的核心特性:

  • 注重字符串的不断改变;
  • 不产生新对象,在同一内存空间中存储字符串的修改(StringBuffer或StringBuilder)。

方法API

概览:

append:连接串;
insert:插入
delete:删
setCharAt:改某一个位置字符
reverse:反转
trimToSize:缩减空间

增、追加(append)

根据API,可以追加所有的基本数据类型的数据到一个串中去;
方法原型: public StringBuffer append(数据类型x);

//append()方法使用示例
public class Main {
	public static void main(String[] args) {
		StringBuffer s = new StringBuffer("abc");
		boolean a = true;
		s.append(a); //在字符串后追加一个布尔类型
		System.out.println(s); //abctrue
		
		int b = 666;
		s.append(b); //在字符串后追加一个int类型
		System.out.println(s);//abctrue666
		
		double c = 99.9;
		s.append(c); //在字符串后追加一个double类型
		System.out.println(s); //abctrue66699.9
	}
}

增、插入(insert)

方法原型: public StringBuffer insert(int offset, 数据类型 x); 其中,offset是位置,x是要插入的数据

//insert方法使用示例
import java.lang.StringBuffer;

public class Main {
    public static void main(String[] args) {
        StringBuffer sb1 = new StringBuffer("abc");
        sb1.insert(1,"123"); //在原本串的下标为1的位置插入字符串;
        System.out.println(sb1); //输出:a123bc

        StringBuffer sb2 = new StringBuffer("abc");
        sb2.insert(1,3.14159); //在原本串的下标为1的位置插入一个double类型的数;
        System.out.println(sb2); //输出:a3.14159bc
        //insert方法可以插入所有数据类型的值;
    }
}

删(delete)

方法原型:

  • public StringBuffer deleteCharAt(int index); 其中方法参数只能是int型的整数;
  • public StringBuffer delete(int start,int end);
public class Main {
	public static void main(String[] args) {
		StringBuffer sb = new StringBuffer("hello,world.");
		StringBuffer sb2 = sb.deleteCharAt(1);
		System.out.println("sb2 = " + sb2); //sb2 = hllo,world.
		
		StringBuffer sb3 = sb.delete(0,3); //从0开始,向后删三个
		System.out.println("sb3 = " + sb3); //sb3 = o,world.
	}
}

改(setCharAt)

setCharAt方法: 仅修改一个位置的一个字符
方法原型: public void setCharAt(int index, char ch);
方法功能: 该方法的作用是修改对象中索引值为index位置的字符为新的字符ch。


public class Main {
    public static void main(String args[]) {
        StringBuffer sb = new StringBuffer("abc");
        sb.setCharAt(1,'x'); //该表原本下标为1的字符;
        System.out.println(sb); //输出:axc

        sb.reverse();
        System.out.println(sb); //输出:cxa
    }
}

反转(reverse)

方法原型: public StringBuffer reverse();
功能: 将StringBuffer对象中的内容反转,然后形成新的字符串。

public class Main {
    public static void main(String args[]) {
        StringBuffer sb = new StringBuffer("abc");
        StringBuffer sb2 = sb.reverse();
        System.out.println("reverse: " + sb2); //reverse: cba
    }
}

String与StringBuffer互转

需要注意的是,StringBuffer和String属于不同的类型,也不能直接进行强制类型转换,下面的代码都是错误的:

StringBuffer s = "abc"; //赋值类型不匹配
StringBuffer s = (StringBuffer)"abc"; //不存在继承关系,无法进行强转
//String和StringBuffer的转化(正确方法)
public class Main {
    public static void main(String[] args) {
        //StringBuffer对象和String对象之间的互转的代码如下:
        String s = "abc";
        StringBuffer sb1 = new StringBuffer("123");
        StringBuffer sb2 = new StringBuffer(s); //String转换为StringBuffer
        String s1 = sb1.toString(); //StringBuffer转换为String
    }
}

StringBuilder

StringBuilder诞生的背景:

  • String的“+”运算或者说是拼接运算,非常浪费空间和时间,会产生很多临时垃圾;
  • 因为每次拼接都会构建一个新的String对象。
    在这里插入图片描述
    注:图片来自“黑马程序员”相关课程笔记。

StringBuffer与StringBuilder的异同

相同点:
1. 两个类都是字符串缓冲类。其内容都是可变的。
2. 两个类的方法都是一致的。
不同点:
1. StringBuffer是多线程安全的(加了锁),操作效率低 ,StringBuilder是线程非安全的(没加锁),操作效率高。
2. StringBuffer是jdk1.0出现 的,StringBuilder 是jdk1.5的时候出现的。

推荐使用: StringBuilder,因为操作效率高。

方法API

概览:
 capacity:当前容量
 length:当前长度
 append:追加
 reverse:反转

容量与大小

方法原型:

  • public int capacity(): 返回当前容量
  • public int length(): 返回长度(字符数)
public class StringBuilderDemo {
	public static void main(String[] args) {
		//创建对象
		StringBuilder sb = new StringBuilder();
		System.out.println("sb:"+sb);
		System.out.println("sb.capacity():"+sb.capacity()); //容量,输出:16
		System.out.println("sb.length():"+sb.length()); //当前大小,输出:0
	}
}

增

追加: public StringBuilder append(任意类型)


public class StringBuilderDemo {
	public static void main(String[] args) {
		//创建对象
		StringBuilder sb = new StringBuilder();
		/*
		sb.append("hello");
		sb.append("world");
		sb.append(true);
		sb.append(100);
		*/
		
		//链式编程
		sb.append("hello").append("world").append(true).append(100);
		
		System.out.println("sb:"+sb);
	}
}

String与StringBuilder互转

StringBuilder – String:
public String toString(): 通过toString()就可以实现把StringBuilder转成String

String – StringBuilder:
StringBuilder(String str): 通过构造方法就可以实现把String转成StringBuilder

public class StringBuilderTest {
	public static void main(String[] args) {
		//StringBuilder 转换为 String
		StringBuilder sb = new StringBuilder();
		sb.append("hello").append("world");
		
		String s = sb.toString();
		System.out.println(s);
		
		//String 转换为 StringBuilder
		String s = "helloworld";
		StringBuilder sb = new StringBuilder(s);
		System.out.println(sb);
	}
}

字符串类的使用原则

  • String使用原则
    适用于少量的字符串操作;
  • StringBuffer的使用原则
    适用多线程下在字符缓冲区进行大量操作的情况;
    要求线程安全的情况下;
  • StringBuilder使用原则
    适用于单线程下在字符缓冲区进行大量操作的情况;
    对线程安全不作要求;

Java字符串训练题集

请访问我的GitHub仓库,或直接点击:https://github.com/Kyle-Shawe/JavaSE-Study-Notes,进入“数据类型以及关系”文件夹中。


Java StringBuffer 、StringBuilder 类和Java 数组 当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。 阅读详情

相关推荐

二维“能量源”(电场、磁场、功率)入射边界设置方法

comsol光学仿真设计相关学习笔记和经验 1. 二维“能量源”(电场、磁场、功率)入射边界设置方法 2.边界条件设置薄膜材料

VJCP_90909Bu0的博客 5192

Java基础(四) StringBuffer、StringBuilder原理浅析

StringBuilder与StringBuffer作用就是用来处理字符串,但String类本身也具备很多方法可以用来处理字符串,那么为什么还要引入这两个类呢? 关于String的讲解请看Java基础(三) String深度解析 首先看下面的例子 public static void main(String[] args) { String str0 = "hel,lo,wor,l,d";...

weixin_30783913的博客 284

2021-8-14 EDK II编译

2021-8-14 EDK II 编译为什么要写这篇文章新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 为什么要写这篇文章 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdo

qq_45775660的博客 2946

StringBuilder类、基本类型与字符串之间的转换

StringBuilder类、基本类型与字符串之间的转换 一、StringBuilder概述 查阅java.lang.StringBuilder的API,StringBuilder又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。 原来StringBuilder是个字符串的缓冲区,即它是一个容器,容器中可以装很多字符串。并且能够对其中的...

qq_43906918的博客 3153

Proteus仿真实战:用STM32F103C8T6输入捕获模式精准测量PWM频率(附完整代码)

本文详细解析了如何在Proteus仿真环境中,利用STM32F103C8T6的输入捕获模式精准测量PWM频率。文章从输入捕获的工作原理、Proteus电路搭建、模块化代码实现到调试优化,提供了完整的实战指南和代码示例,帮助开发者深入理解并掌握这一关键技术。

weixin_29158047的博客 257

Dify插件离线部署全攻略:从下载到安装的完整流程

本文详细介绍了Dify插件离线部署的完整流程,针对企业内网等无网络环境需求。核心步骤包括在联网环境下载插件包、在特定Python 3.12.9环境下使用专用工具进行离线重打包,以及最终在离线Dify环境中安装验证。重点解决了离线安装的核心难题,并提供了环境配置、批量处理和故障排查等实用技巧,帮助用户实现Dify插件的顺利离线部署。

seed的博客 656

java中的String,StringBuilder和StringBuffer。

String,StringBuilder和StringBuffer。 速度 String字符串常量 StringBuffer字符串变量(线程安全) StringBuilder字符串变量(非线程安全) 简单的说,String类型与StringBuffer类型及StringBuild...

递归算法解决汉诺塔,真值表等问题总结整理 444

汇川PLC和PLC之间ModebusTCP通讯

然后在全局变量中创建相应的变量关联IW和QW的寄存器创建全部变量//AM402作为主站——读H3U(D12-D21)//AM402作为主站——写给H3U(D200-D209)或者使用数组的方式。

panjinliang066333的博客 3万+

JAVA String类方法全解析

import java.nio.charset.Charset;import java.nio.charset.UnsupportedCharsetException;import java.util.Locale;import java.util.Date;import java.util.regex.PatternSyntaxException;import javax....

weixin_33978044的博客 176

驯服电源尖峰:从BUCK/BOOST环路剖析到高di/dt噪声的实战抑制

本文深入探讨了电源系统中高di/dt噪声的产生机制及抑制方法,通过BUCK/BOOST电路的环路分析,揭示了电流路径不连续导致的电压尖峰问题。文章提供了实用的PCB布局技巧和噪声抑制策略,包括最短回路原则、铺铜优化和过孔阵列战术,帮助工程师有效降低EMI噪声,提升电源系统的稳定性。

weixin_29587015的博客 273

告别手动翻页!用幻影联动+DLL调用,5分钟搞定通达信分时指标自动选股

本文详细介绍了如何利用幻影联动软件结合DLL调用技术,实现通达信分时指标的自动化选股。通过改造指标代码和配置幻影联动任务,用户可以在5分钟内完成从信号检测到自动报警的全流程,大幅提升短周期交易的效率和准确性。

weixin_42561040的博客 764

java基础学习之String类

1、String有两种实例化的操作:第一种是:直接赋值 String a=”Hello”;第二种是:通过关键字new  String a=new String (“Hello”); 两个方法比较:String a=”hello” String a1=new String(“hello”);Stirng b=”hello” String b1=new String(“hello”);a和b指向的...

wxylala的博客 287

Android11车机系统海外项目资源包RRO方案优化

本文介绍了汽车设置应用如何通过Android RRO(运行时资源叠加)方案实现多车型差异化资源管理。针对不同车型(国内/海外、轿车/SUV)和配置(方向盘、轮毂等),采用产品变体(productFlavors)构建不同APK版本,并通过JSON配置文件动态启用对应资源包。系统根据车辆下线配置自动匹配适用的资源叠加包,解决了硬编码判断带来的维护问题。该方案实现了资源的高效复用,同时支持灵活配置多种车型组合,为汽车行业多车型共平台开发提供了可扩展的技术实现。

shusuanly的博客 469

Java StringBuffer 和 StringBuilder 类

当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。

Aforxiaoxie 2102

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

二、Java中的String类、StringBuffer类、StringBuilder类

String类、StringBuffer类、StringBuilder类

在校大学生一枚 3183

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

java中StringBuffer类和StringBuilder类常用的api

java中StringBuffer和StringBuilder的api

. 1280

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java StringBuffer和StringBuilder

一、前言 我们在实际的开发中,如果需要进行字符串的频繁拼接,会出现以下问题: java中的字符串是不可变的,每一次拼接都会产生新字符串。 这样会占用大量的方法区内存。造成内存空间的浪费。 eg. String s = "abc"; s += "hello"; 就以上两行代码,就导致在方法区字符串常量池当中创建了3个对象: "abc" "hello" "abchello" 因此引出StringBuffer和StringBuilder可变字符串! 二、如何优化StringBuffer和StringBuild

一只小菜鸡 7879

Java StringBuffer和StringBuilder

StringBuffer和StringBuilder详解!

WYSCODER的博客 2226

Java—String类、StringBuffer类和StringBuilder类的使用

在Java中自带针对字符串操作的类,String类、StringBuffer类和StringBuilder类,而这三种类都是针对字符串但也有区别,在本文中则介绍这三种类的区别。String类是jdk自带的字符串类,它是一个字符串常量,长度是不可变的。当你创建字符串时,给定多少个字符就是多少个字符,不允许更改字符串长度。因为String底层使用字符串数组,而该数组使用final修饰,所以它是不可变。

Jun_ID的博客 973

Java中的String类与StringBuffer 和 StringBuilder 类的应用

在实际开发中,我们可以根据具体的需求选择合适的类: 如果需要表示一个固定的字符串,可以选择String类。 如果需要在多线程环境中对字符串进行修改,可以选择StringBuffer类。 如果需要在单线程环境中对字符串进行修改,并且对性能有较高要求,可以选择StringBuilder类。

MrxiaoAXiao的博客 1049

【Java基础】String类、StringBuffer和StringBuilder类

String String类继承了object类,用来描述字符串。Java中定义了String类用来处理字符串,并提供了一系列操作字符串的方法,他们都封装在java.lang包中,因此不需要导入包就可以直接使用。 String类使用了final修饰符,表示该类不可以被重写。 String类是不可改变的,所以你一旦创建了String对象,那它的值就无法改变了。 String s1 = "abc"; // 常量池 String s2 = new String("abc"); //

孙正_大正 4276

理解String、StringBuffer和StringBuilder类

String、StringBuffer和StringBuilder类

weixin_61898502的博客 1618
上一篇: 【Java数据类型】“字符串”全解之“String类”
下一篇: 【Java数据类型】各种数据类型的相互转换总结
ALGO阿狗
博客等级 码龄9年 64粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值