全面解释java中StringBuilder、StringBuffer、String类之间的关系

arduino uno spi驱动12864 arduino uno spi驱动12864 阅读详情

全面解释java中StringBuilder、StringBuffer、String类之间的关系

作者: 字体:[增加 减小] 类型:转载
String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间,StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象,StringBuffer和StringBuilder类功能基本相似
1. String 类 
  String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。 
String a = "a"; //假设a指向地址0x0001 
a = "b";//重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的,a 已经指向了其它地址。 
因此String的操作都是改变赋值地址而不是改变值操作。 

2. StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。 每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。 

StringBuffer buf=new StringBuffer(); //分配长16字节的字符缓冲区 
StringBuffer buf=new StringBuffer(512); //分配长512字节的字符缓冲区 
StringBuffer buf=new StringBuffer("this is a test")//在缓冲区中存放了字符串,并在后面预留了16字节的空缓冲区。 

3.StringBuffer 
  StringBuffer和StringBuilder类功能基本相似,主要区别在于StringBuffer类的方法是多线程、安全的,而StringBuilder不是线程安全的,相比而言,StringBuilder类会略微快一点。对于经常要改变值的字符串应该使用StringBuffer和StringBuilder类。 

4.线程安全 
StringBuffer 线程安全 
StringBuilder 线程不安全 

5.速度 
一般情况下,速度从快到慢:StringBuilder>StringBuffer>String,这种比较是相对的,不是绝对的。 

6.总结 
(1).如果要操作少量的数据用 = String 
(2).单线程操作字符串缓冲区 下操作大量数据 = StringBuilder 
(3).多线程操作字符串缓冲区 下操作大量数据 = StringBuffer 

以下是代码与演示说明:

复制代码代码如下:

public class TestCharacter { 
final static int time = 50000; //循环次数 

public TestCharacter(){ 

} 
public void test(String s){ 
long begin = System.currentTimeMillis(); 
for(int i=0; i<time; i++){ 
s += “add”; 
} 
long over = System.currentTimeMillis(); 
System.out.println(“操作”+s.getClass().getName()+”类型使用的时间为:”+(over-begin)+”毫秒”); 
} 
public void test(StringBuffer s){ 
long begin = System.currentTimeMillis(); 
for(int i=0; i<time; i++){ 
s.append(“add”); 
} 
long over = System.currentTimeMillis(); 
System.out.println(“操作”+s.getClass().getCanonicalName()+”类型使用的时间为:”+(over-begin)+”毫秒”); 
} 
public void test(StringBuilder s){ 
long begin = System.currentTimeMillis(); 
for(int i=0; i<time; i++){ 
s.append(“add”); 
} 
long over = System.currentTimeMillis(); 
System.out.println(“操作”+s.getClass().getName()+”类型使用的时间为:”+(over-begin)+”毫秒”); 
} 

/*对 String 直接进行字符串拼接的测试*/ 
public void test2(){ 
String s2 = “abcd”; 
long begin = System.currentTimeMillis(); 
for(int i=0; i<time; i++){ 
String s = s2 + s2 +s2; 
} 
long over = System.currentTimeMillis(); 
System.out.println(“操作字符串对象引用相加类型使用的时间为:”+(over-begin)+”毫秒”); 
} 
public void test3(){ 
long begin = System.currentTimeMillis(); 
for(int i=0; i<time; i++){ 
String s =”abcd” + “abcd” + “abcd”; 
} 
long over = System.currentTimeMillis(); 
System.out.println(“操作字符串相加使用的时间为:”+(over-begin)+”毫秒”); 
} 
public static void main(String[] args){ 
String s1 = “abcd”; 
StringBuffer st1 = new StringBuffer(“abcd”); 
StringBuilder st2 = new StringBuilder(“abcd”); 
TestCharacter tc = new TestCharacter(); 
tc.test(s1); 
tc.test(st1); 
tc.test(st2); 
tc.test2(); 
tc.test3(); 
} 
} 

我在myeclipse和dos下都运行了这段代码,各自打印出的时间有些不同,运行结果如下: 
1)myeclipse下循环10000次时: 

2)myeclipse下循环50000次时:

3)在DOS下运行时:

告别命令行!用这个开源的Web版Kettle工具,5分钟搞定数据集成任务编排 本文介绍了一款开源的Web版Kettle工具,通过直观的拖拽界面大幅提升数据集成效率,告别复杂的命令行操作。该工具基于Kettle核心引擎,支持跨平台协作、轻量化访问和降低学习曲线,特别适合业务分析师快速上手。实测显示,使用该工具后任务配置错误率下降62%,协作效率提升40%。 阅读详情

相关推荐

KVNAND架构:解决边缘设备部署LLM的内存与带宽挑战

大语言模型(LLM)在边缘设备部署时面临内存容量和带宽限制的核心挑战。传统方案依赖DRAM存储KV缓存,导致高昂成本和性能瓶颈。闪存计算(IFC)通过计算单元下沉和流水线优化缓解部分问题,但仍受限于DRAM依赖。KVNAND架构创新性地将KV缓存直接存储在3D NAND闪存中,结合异构计算和页面级KV映射技术,显著降低延迟和能耗。该架构特别适用于长上下文场景,如文档分析和个人助理应用,能有效解决内存溢出(OOM)问题并提升计算单元利用率。关键技术包括头组并行(HG)执行和混合键合设计,为边缘AI部署提供了新

weixin_27215337的博客 321

全面解释java中StringBuilder、StringBuffer、String类之间的关系 详细出处参考:http://www.jb51.net/article/33398.htm

1. String 类    String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。  String a = "a"; //假设a指向地址0x0001  a = "b";//重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的,a 已经指向了其它地址。  因此

YvanTan的专栏 740

2026年AI技能进阶指南:从提示词工程到智能体开发实战

提示词工程作为AI时代的基础沟通技能,其核心原理是通过系统化的交互方法论实现与大模型的高效对话。这项技术通过明确性、具体性和可操作性的设计原则,显著提升了AI生成内容的质量和实用性。在工程实践层面,提示词工程已经发展出角色扮演、步骤分解等成熟模式,广泛应用于代码生成、技术方案设计等场景。随着AI智能体开发的兴起,提示词工程进一步演化为定义智能体身份认知和行为规范的系统接口设计,成为构建自主AI系统的关键技术基础。掌握从基础提示词到智能体开发的完整技能栈,能够帮助开发者在AI技术浪潮中保持核心竞争力。

weixin_33139275的博客 333

StringBuilder,toString()

StringBuilder叫字符串缓存区对象,使用时可以不断添加字符、字符串等已有内容。 需要使用时调用toString()获得对象里的所有字符串。

Hello_MAOSONG的博客 4021

Java开发者必看:Apache PDFBox实现PDF数字签名完整指南(附源码)

本文为Java开发者提供了使用Apache PDFBox实现PDF数字签名的完整指南。详细介绍了从环境配置、核心原理到完整代码实现的全过程,涵盖证书管理、签名位置计算、性能优化及实际应用案例,并附有可直接复用的源码,帮助开发者高效集成PDF数字签名功能。

o1p2q3r的博客 340

开启虚拟人物互动新时代:探索相芯Avatar SDK驱动功能(Android)

相芯SDK提供了男孩和女孩Avatar驱动模型,这些模型具备半身驱动和全身驱动的功能,使得虚拟角色能够根据用户的面部表情和动作实时模仿和响应。半身驱动功能: 相芯SDK的男孩和女孩Avatar驱动模型具备上身驱动功能,即能够通过用户的面部表情和动作来驱动虚拟角色的上半身行为。这意味着用户的面部表情、头部转动和上半身姿态等动作可以直接映射到虚拟角色上,使得虚拟角色能够栩栩如生地模仿用户的动作。例如,用户微笑时,虚拟角色会展现出笑容;用户转动头部时,虚拟角色也会相应地转动头部。

Faceunity2023的博客 632

java = stringbuffer_全面解释java中StringBuilder、StringBuffer、String类之间的关系

1. String 类String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。String a = "a"; //假设a指向地址0x0001a = "b";//重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的,a 已经指向了其它地址。因此String的操作都是改变赋值地址而...

weixin_39631767的博客 181

AI计算,为什么要用GPU?

几年后,2012年,神经网络之父杰弗里·辛顿(Geoffrey Hinton)的两个学生——亚历克斯·克里切夫斯基(Alex Krizhevsky)、伊利亚·苏茨克沃(Ilya Sutskever),利用“深度学习+GPU”的方案,提出了深度神经网络AlexNet,将识别成功率从74%提升到85%,一举赢得Image Net挑战赛的冠军。根据形态,GPU可分为独立GPU(dGPU,discrete/dedicated GPU)和集成GPU(iGPU,integrated GPU),也就是常说的独显、集显。

经营范围: CTA、SRRC、CCC、移动、电信、联通入库 1676

解释java中StringBuilder、StringBuffer、String类之间的关系

1. String 类   String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。 String a = "a"; //假设a指向地址0x0001 a = "b";//重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的,a 已经指向了其它地址。 因此St

u010491276的专栏 399

在claude code中使用glm模型出现Unable to connect to Anthropic services的解决方案

本文主要介绍了在claude code中使用glm模型出现Unable to connect to Anthropic services的解决方案,希望能对使用claude code的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 13万+

2025.05.29【Network】多组学分析:网络互作图绘制

本文介绍了使用R语言进行网络图绘制的方法与技巧。重点讲解了三个核心R包的使用:igraph用于网络图数据准备与基础绘制,ggraph基于图形语法实现高级可视化,networkD3则为网络图添加交互功能。文章涵盖了从基本概念、包安装、创建网络图对象,到自定义样式布局、添加交互性等完整流程,并提供了度分布、聚类系数等网络分析指标的计算方法。通过清晰的代码示例,帮助读者掌握生物信息学数据可视化的关键技能,为复杂数据的直观展示和分析提供实用工具。

228

紫雾娇妆拍摄花絮:灯光布光与后期调色全流程解析

在影像创作中,色彩管理与后期调色是决定作品质感的核心技术环节。无论是影视项目还是短视频制作,摄影师都需要在复杂光线下还原真实肤色,同时营造特定氛围色调。视频制作中常见的难点是如何平衡环境氛围色与主体色彩,避免出现偏色、肤色失真等问题。紫雾娇妆拍摄花絮正是这类技术挑战的典型场景,它要求拍摄者在现场通过灯光布置和机内参数设置,先为紫色氛围打好基础,再在后期通过示波器监看、分区调色、LUT应用等手段,实现“紫色氛围”与“肤色保护”的和谐统一。本文从色彩管理原理出发,结合灯光、调色、剪辑等工程实践,梳理出一条可复用

weixin_30437847的博客 385

电容式三点式振荡电路/电感式三点振荡电路基础知识及Multisim电路仿真

摘要:三极管振荡电路利用放大特性与正反馈实现自激振荡,需满足巴克豪森条件(增益≥1,相位匹配)。核心由放大级、反馈网络、选频网络和稳幅环节构成。主要分为三类:1)LC/RC正弦波振荡电路(如电容三点式、电感三点式),输出高频/低频正弦波;2)多谐振荡电路,通过电容充放电产生方波;3)张弛振荡电路,生成锯齿波等。设计需关注相位匹配、增益控制和元件适配。LC振荡频率由谐振参数决定,RC振荡由时间常数控制。稳幅机制通过非线性或主动元件维持等幅输出。该电路在信号发生、时钟源等领域有广泛应用。

XU157303764的博客 2044
上一篇: Java的文件读写操作
下一篇: java.util.vector中的vector的详细用法
codepython
博客等级 码龄20年 125粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值