Java String 与 StringBuffer 用法区别

AI Agent开发实战:100个真实场景题库解析 AI Agent开发涉及复杂的需求理解、架构设计及安全防护等关键技术环节。在工程实践中,开发者常面临需求偏差、系统崩溃等挑战,特别是在金融、医疗等高要求场景下。通过真实案例题库,开发者能系统性地掌握需求分析、架构决策树建模(如向量数据库选型)、安全攻防策略(如提示词注入防御)等核心技能。这些实战经验不仅能提升Agent的可用性和安全性,还能优化其在电商客服、智能家居等场景中的表现。题库采用动态难度系统,覆盖从基础到高级的开发挑战,是AI工程化落地的重要参考。 阅读详情

String类用来表示那些创建后就不会再改变的字符串,它是immutable的。而StringBuffer类用来表示内容可变的字符串,并提供了修改底层字符串的方法。

 

--当我们进行字符拼接时,请使用StringBuffer类而非String类,因为前者将比后者快上百倍。

 

的确,在程序的太多场合我们都会进行字符串拼接工作,简单的代码示例如下:

String str="You are nice.";

str+="I love you so much.";

 

如果用StringBuffer类的话,代码如下:

 

StringBuffer str= new StringBuffer("You are nice.");

str.append("I love you so much.");

 

从表面看来String类只用一个加号(+)便完成了字符串的拼接,而StringBuffer类却要调用一个append()方法,是否实现起来更简洁,更单纯呢?其实不然,让我们了解一下程序运行内部发生了哪些事情:

 

经编译后程序的bytecode(字节码)展示出了实质:在用String类对象直接拼接时,JVM会创建一个临时的StringBuffer类对象,并调用其append()方法完成字符串的拼接,这是因为String类是不可变的,拼接操作不得不使用StringBuffer类(并且--JVM会将"You are nice."和"I love you so much."创建为两个新的String对象)。之后,再将这个临时StringBuffer对象转型为一个String,代价不菲!可见,在这一个简单的一次拼接过程中,我们让程序创建了四个对象:两个待拼接的String,一个临时StringBuffer,和最后将StringBuffer转型成为的String--它当然不是最初的str了,这个引用的名称没变,但它指向了新的String对象。

 

而如果直接使用StringBuffer类,程序将只产生两个对象:最初的StringBuffer和拼接时的String("I love you so much."),也不再需要创建临时的StringBuffer类对象而后还得将其转换回String对象。

 

可以想象,当我们的字符串要被循环拼接若干段时,用String类直接操作会带来多少额外的系统开销,生成多少无用的临时StringBuffer对象,并处理多少次无谓的强制类型转换哪。

 

String 类

 

    String 类提供了几种字符串创建方法。

String s = "abcd" 使用字符串常量自动创建String实例。

String s = new String(String s)通过String 对象或字符串常量传递给构造方法。

public String (char value[],int offset, int count)将字符数组一部分赋给String 构造方法,offset 为起始下表, count 为数组长度。

String 类提供了丰富的字符串操作方法,其中重要的例举如下。

public int lenght() 返回字符串的长度。

public char charAt(int index) 返回字符串位置index处的字符。

public boolean equals(Object o) 比较两个字符串对象,相等则返回true;反之返回false。

public int compareTo(String s) 比较两个字符串字典顺序,相等返回0,s大于当前字符串返回一个负值,s小于当前串返回一个正值。

public boolean regionMatches(int toffset,String other,int ooffset,int len)从当前字符串位置toffset开始寻找字符串other中起始位置为ooffset 长度为len 的子串。如发现匹配,返回true; 否则,返回false。

public boolean startsWith(String prefix) 从当前字符串的起始位置开始寻找字符串 prefix。如发现匹配,返回true;否则,返回false。

public boolean endsWith(String suffix) 如当前字符串的结尾子串与 suffix 匹配,返回true;否则,返回false。

public int indexOf(String str) 在当前字符串中寻找与str匹配的子串,返回首次匹配的起始下表值;无匹配返回-1。

public String substring(int beginIndex,int endIndex) 在当前字符串中,求从起始位置 beginIndex 到结束位置 endIndex 的子串。

public String concat(String str) 将当前字符串与str连接,返回连接后的字符串。

public String toLowerCase() 将当前字符串全转换为小写形式。

public String toUpperCase() 将当前字符串转换为大写形式。

public char toCharArray() 将当前字符串转换为字符数组。

public Static String valueOf(type variable) 把variable 转换为字符串,其中 type 表示 variable 的数据类型。

 

 

StringBuffer类

String类实现一种不能改变的静态字符串,StringBuffer类实现一种动态可以改变的字符串。StringBuffer类可以用于创建String类,StringBuffer一旦建立,可以用toString()方法将其转换为String类,以后,就可以使用String 类方法来操作。

 

StringBuffer 类提供了三种创建方法。

public StringBuffer()创建一个空的StringBuffer类。

public StringBuffer(int length)创建一个大小为length的StringBuffer类。

public StringBuffer(String str)按str创建一个动态可变的StringBuffer类。

StringBuffer类提供的方法主要用于把输入的数据转换为String类。输入数据可来自键盘或其他数据源。类型可以是字符,字符数组,证书,浮点数和Object类型等。

public int length()返回缓冲区的字符数
    public int capacity()返回缓冲区的容量大小,其值为:字符串长度+16。

public synchronized StringBuffer append(type variable) 把variable转换为字符串,然后与当前字符串连接。

public synchronized StringBuffer append(Char(char ch))把字符ch连接到当前串尾。

public synchronized StringBuffer insert(int offset,type variable) 把variable转换为字符串,然后插入到当前串中由offset指定的位置。

public synchronized StringBuffer insert(int offset,char ch)把字符 ch 插入到当前串由ofset指定的位置。

public synchronized String toString()把StringBuffer转换为字符串String。各个方法的使用,具体请参阅 JAVA API文档。

手把手教你学simulink(90.1)--直流电动机实例:基于Simulink的基本模型的直流电动机(DC Motor)建模 直流电动机(DC Motor)因其结构简单、控制方便和良好的调速性能,广泛应用于各种工业自动化、机器人技术、家用电器以及航空航天等领域。为了更好地理解和应用直流电动机的工作原理及其控制系统,本项目旨在通过Simulink对直流电动机进行基本模型的建模与仿真。 阅读详情

相关推荐

抓包工具(五)2025版 Burp Suite Professional的下载、安装、使用

抓包工具(五)2025版 Burp Suite Professional的下载、安装、使用

ACGkaka的博客 2万+

java字符串String&StringBuffer

 7.1 String类7.2StringBuffer类7.1 String类String类(字符串类)的对象是一经创建便不能变动内容的字符串常量,在前面的程序中我们已经多次使用了字符串常量,例如输出语句中的参数之一"Input a Integer data/n"就是字符串常量,只是当时并未明确提出这个概念。在学习String类的知识之前,我们先强调一点,那就是请读者把本章学习字符串常量与

大师的资源 4734

Nginx下ModSecurity模块安装详细教程

本文提供了在Nginx 1.28.0上安装ModSecurity v3的完整教程。首先需安装编译依赖,然后从源码编译安装ModSecurity库并设置优化参数。接着编译Nginx动态模块并配置加载。核心配置包括设置规则引擎、日志路径及性能优化参数。安装OWASP核心规则集后,在Nginx站点配置中启用ModSecurity。最后测试规则有效性并给出性能优化建议,如规则排除、精简规则集等。整个过程包含详细的命令和配置示例,确保安全防护功能正常运作。

深山技术宅的博客 1784

java字符串缓冲区StringBuffer和StringBuilder

字符缓冲区之StringBuffer和StringBuilder类 1、StringBuffer解析: API说是字符串缓冲区支持可变的字符串,并且是线程安全的,但是执行速度慢。 2、StringBuffer出现的意义? 提高字符串的操作效率,因为String类一旦创建是不可变的,每次更改String都会产生一个新的字符串对象;在常量池中,会造成浪费空间。Stringbuffer的出现就是为了...

kiing9819的博客 799

告别MATLAB环境!保姆级教程:用Application Compiler把你的GUI程序打包成独立exe(2020R版本实测)

本文详细介绍了如何使用MATLAB的Application Compiler工具将GUI程序打包成独立exe文件,特别针对2020R版本进行实测。从技术原理、配置详解到打包实战与问题排查,提供完整的解决方案,帮助开发者实现无需MATLAB环境的程序分发,提升工作效率。

weixin_30571465的博客 274

MTK平台Wi-Fi学习--wifi channel 通过国家码进行功率限制和wifi eFEM 基本配置和wifi Tx SEM问题

本文介绍了WiFi功率限制配置和eFEM硬件设置方法。在功率限制方面,通过国家码可针对不同信道设置功率上限,需在rlm_txpwr_init.h文件中配置信道和功率值(单位0.5dBm),WiFi6的HE_TB模式还可分RU设置。eFEM硬件配置需参考平台设计,注意VDET接口处理,首次使用建议提交HW/SW案例审核。软件配置需获取专用FEM包,包含NVRAM、GPIO等文件,按指导合并后版本才会切换为eFEM版本。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 484

Java中String、StringBuffer、StringBuilder简述及区别

容我喝杯82年的Java压压惊~~~如有欢迎指正。 1.String:由多个字符组成的一串数据,相当与字符数组。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。字符串是常量,它们的值在创建之后不能更改。 (1)字符串直接赋值和new String(…)的区别 图解:2.S

MAGIC 2628

备考路上的学习笔记:我的软考高级架构师复盘与更新计划

本专栏基于作者备考软考高级系统架构设计师的真实经验,分为考前突击、基础夯实、核心突破、案例实战和论文通关五大模块。内容涵盖计算机体系结构、操作系统、数据库等核心知识,提供案例解析和论文范文。作者承诺持续更新考纲内容、真题复盘及互动答疑,旨在帮助考生系统备考,将个人踩坑经验转化为实用指南,陪伴考生共同完成从知识碎片到体系构建的蜕变历程。

qq837993702的博客 2295

String与StringBuffer的区别

String与StringBuffer的区别简单地说,就是一个变量和常量的关系。StringBuffer对象的内容可以修改;而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象。StringBuffer的内部实现方式和String不同,StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。String:在String类中没有用来改变已有字

Eterno的专栏 18万+

RK3568平台开发系列讲解:UBOOT详细介绍

U-boot是一款广泛使用的开源引导加载程序,支持多种嵌入式操作系统和处理器架构。其主要功能包括系统上电时的硬件初始化、引导操作系统内核等。U-boot的引导流程通常包括Boot Code、idbloader.img、uboot.img、boot.img和rootfs.img等步骤。启动U-boot时,通过Debug串口连接板卡,按下ctrl+c键可进入U-Boot命令行模式。U-boot启动过程中会执行一系列初始化操作,如打印系统信息、初始化内存、加载内核设备树、初始化I2C、PMIC电源芯片、DRM框架

内核笔记 808

第32篇:Vibe Coding时代:LangGraph + Redis 任务状态持久化实战,解决服务重启后任务状态丢失问题

LangGraph + Redis任务状态持久化方案 本文针对Agent任务状态丢失问题,提出基于Redis的持久化解决方案。当服务重启时,传统内存存储方式会导致任务状态丢失,影响用户体验和运维排查。 核心方案 使用Redis Hash存储任务状态,key格式为agent:task:{task_id} 设计完整状态字段包括task_id、status、progress等关键信息 实现task_store模块提供CRUD操作接口 在Agent执行各节点更新Redis中的任务状态 技术实现 通过Celery执行

sundong_81的博客 42

String&StringBuffer类转换

一、String转化为StringBuffer类方法一:使用StringBuffer类的构造方法,public StringBuffer(String str) public class Person { public static void main(String[] args) { String str ="hello world"; String

Maybe_ch的博客 3820

12、硬件工程师笔试面试——MOS管(2025版本)

在设计和测试过程中,可以参考相关的EMC测试标准和指南,如CE认证EMC电磁兼容测试介绍 和电磁兼容性(EMC)测试方法与整改指南 ,以及电磁兼容(EMC)的标准与测试内容 ,来确保MOSFET的EMC性能符合行业标准。在高频应用中,MOSFET的开关速度对电路的整体性能至关重要。是一款高电压同步N沟道MOSFET驱动器,具有自举电源电压至114V的能力,宽VCC电压范围,自适应贯通保护功能,以及高达1.4A的峰值顶端栅极上拉电流,适用于分布式电源架构、汽车电源、高密度电源模块和电信系统等应用。

XU157303764的博客 7092

Java中API下的String,StringBuffer,StringBuilder的区别及用法

String,StringBuffer,StringBuilder的区别及用法目录String,StringBuffer,StringBuilder的异同String的常用方法StringBuffer,StringBuilder的常用方法后记 目录 String,StringBuffer,StringBuilder的异同 String :不可变的字符序列,底层使用char[ ]存储; StringBuffer :可变的字符序列,线程是安全的,但效率低,底层使用char[ ]存储; StringBuffer

m0_49611292的博客 273

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java 中 String、StringBuffer、StringBuilder用法及区别详解

一、StringBuffer 简介二、StringBuffer 的常用操作三、String, StringBuffer, StringBuilde 的区别 一、StringBuffer 简介 String 作为不可修改的对象,即每次更改 String 都会产生一个新的字符串对象。与之相对应的 StringBuffer 类的对象能够进行多次修改并且不会产生新的未使用的对象,因此在内存上要优...

360°顺滑 239

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java中String、StringBuffer、StringBuiler的区别和用法

文章目录Java中 String、StringBuffer、StringBuilder的区别和用法可变类与不可变类String、StringBuffer、StringBuilder的关系和用法区别StringBuilder 部分API(StringBuffer与此相同) Java中 String、StringBuffer、StringBuilder的区别和用法 Java中的字符串类有我们最熟悉的S...

qq_36831845的博客 442

Java中String ,StringBuffer和StringBuilder的区别和用法

1.概述: 1.1 String 字符串常量,但是它具有不可变性,就是一旦创建,对它进行的任何修改操作都会创建一个新的字符串对象。 1.2 StringBuffer 字符串可变量,是线程安全的,和StringBuilder类提供的方法完全相同。如果查看java的源代码(即java安装目录的src.zip文件),就会发现它和StringBuilder类的方法的区别就是,在每个方法前面添加了"

博客 781

Java 中 String、StringBuffer、StringBuilder 的用法与区别

是不可变的。 咦,你不是说 是不可变的吗?这怎么就变了。 变为小写字母了。String 不可变指的是 String 指向的对象不可变,而不是 String 对象引用不可变。 是一个对象引用,存放 的地址, 存在栈中。是字符串对象,它的值不会发生改变,存在堆中。 字符串没有被改变,只是新建了一个新的 字符串,然后 这个引用指向了新的。 字符串后面会被垃圾回收处理。每次对 对象进行改变的时候,都会生成一个新的 对象,然后将引用指向新的 对象,然后丢弃掉旧的 对象,因此效率很差。 会预分配缓冲区,每次

Show me the code. 591

Java中String与StringBuffer的基本用法与区别

String repalceFirst(String,String) 将第一次出现的某个内容替换成指定的内容。String replaceAll(String,String) 将某个内容全部替换成指定内容,支持正则。String replace(String,String) 将某个内容全部替换成指定内容。String substring(int,int) 从下标x截取到下标y-1对应的元素。String substring(int) 从指定下标开始一直截取到字符串的最后。4.和改变内容有关的方法。

m0_73566497的博客 586

Java 中 String、StringBuffer 和StringBuilder的用法及区别

特征String是否可变不可变可变可变线程安全安全安全不安全性能低(频繁操作)中(有同步开销)高适用场景不需要频繁修改字符串内容多线程环境下需要频繁修改字符串内容单线程环境下需要频繁修改字符串内容选择哪个类取决于具体的使用场景和性能需求。如果字符串内容不需要修改,使用 String 是最好的选择;如果需要在多线程环境下修改字符串内容,使用 StringBuffer;如果只需要在单线程环境下修改字符串内容,使用 StringBuilder 会获得更好的性能。

indiansummer_的博客 654

Java—String、StringBuffer、StringBuilder的用法与区别

StringBuffer:字符串变量(Synchronized,即线程安全)。如果要频繁对字符串内容进行修改,出于效率考虑最好使用StringBuffer,如果想转成String类型,可以调用StringBuffer的toString()方法。

一个优秀的废人 506

Java基础——String、StringBuiler、StringBuffer的用法和区别

1.区别 1.1 三者本质区别 String:每次增加数据都会开辟新空间,存储数据,将上一块空间通过GC进行回收 StringBuiler、StringBuffer:是可变长度,数据增加是直接在现有空间进行操作 1.2 StringBuilerStringBuffer区别 非线程安全StringBuiler: 线程安全StringBuffer:...

dicuo0992的博客 253
上一篇: StringBuffer的用法
下一篇: serialVersionUID的作用
randomnet
博客等级 码龄19年 59粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值