在java中有3个类来负责字符的操作。
1.Character 是进行单个字符操作的,
2.String 对一串字符进行操作,不可变类。
3.StringBuffer 也是对一串字符进行操作,是可变类。
String:
是对象不是原始类型.
为不可变对象,一旦被创建,就不能修改它的值.
对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String 是final类,即不能被继承.
StringBuffer:
是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立,
StringBuffer sb = new StringBuffer();
注意:不能通过赋值符号对它进行付值.
sb = "welcome to here!";//error
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer中赋值的时候可以通过它的append()方法.
sb.append("hello");
字符串连接操作中StringBuffer的效率要比String高:
String str = new String("welcome to ");
str += "here";
的处理步骤实际上是通过建立一个StringBuffer,然后调用append(),最后
再将StringBuffer toSting();
这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.
并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值.
这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的.
看看以下代码:
将26个英文字母重复加了5000次,
String tempstr = "abcdefghijklmnopqrstuvwxyz";
int times = 5000;
long lstart1 = System.currentTimeMillis();
String str = "";
for (int i = 0; i < times; i++) {
str += tempstr;
}
long lend1 = System.currentTimeMillis();
long time = (lend1 - lstart1);
System.out.println(time);
可惜我的计算机不是超级计算机,得到的结果每次不一定一样一般为 46687左右。
也就是46秒。
我们再看看以下代码
String tempstr = "abcdefghijklmnopqrstuvwxyz";
int times = 5000;
long lstart2 = System.currentTimeMillis();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < times; i++) {
sb.append(tempstr);
}
long lend2 = System.currentTimeMillis();
long time2 = (lend2 - lstart2);
System.out.println(time2);
得到的结果为 16 有时还是 0
所以结论很明显,StringBuffer 的速度几乎是String 上万倍。当然这个数据不是很准确。因为循环的次数在100000次的时候,差异更大。不信你试试
如果还是不能够明白:
1)String的联合+方法与StringBuff的append方法的区别:
String的+运算符在进行字符串运算时,首先将当前的字符串对象转换为StringBuff 类型,调用其append方法,最后再将生成的StringBuff 对象通过其toString 方法转换为String类型的字符串,所以其效率要低。
但是在可读性上,还是String的连接运算符要高。
2)StringBuff是线程安全的
String是线程是非安全的
3)String是不可以修改的字符串对象,而StringBuff是可以修改的。
public static boolean fileCopy(String srcStr, String destStr) {
File srcFile = null;
File destFile = null;
Reader reader = null;
Writer writer = null;
boolean flag = false;
try {
srcFile = new File(srcStr);
if (!srcFile.exists()) {
System.out.println(“源文件不存在”);
System.exit(0);
} else {
reader = new FileReader(srcFile);
}
destFile = new File(destStr);
writer = new FileWriter(destFile);
char[] buff = new char[1024];
int len;
String str = “”;
StringBuffer sbuff = new StringBuffer();
while ((len = reader.read(buff)) != -1) {
// str += new String(buff, 0, len);
sbuff.append(new String(buff,0,len));
}
// writer.write(str.toCharArray());
writer.write(sbuff.toString().toCharArray());
flag = true;
writer.flush();
reader.close();
writer.close();
} catch (IOException e) {
System.out.println(“文件拷贝异常:= ” + e.getMessage());
}
return flag;
}相关推荐
Windows 本地安装 OpenClaw(龙虾)完整教程(纯净无广告)
《Windows系统OpenClaw本地AI网关安装指南》 本文提供Windows 10/11系统下OpenClaw(龙虾)AI网关的完整部署教程,包含: 环境配置:Node.js安装验证 核心安装:npm全局部署OpenClaw 模型对接:以DeepSeek为例配置API 扩展功能:飞书机器人集成方法 日常管理:启停命令/Web面板访问 卸载清理:完整移除服务与残留 教程涵盖初始化配置、技能管理、常见问题排查,特别说明管理员权限要求及飞书配对流程,适合新手30分钟内完成本地AI网关搭建。通过命令行操作与W
String与StringBuffer的区别?
String: 1.String创建的对象是不可变的,一旦创建不可改变 2.对象值可以改变其实是创建了一个新的对象,然后把新的值保存进去(如图1) 3.String类被final修饰,不可以被继承 4.String创建的对象的值存在于常量池,不用的时候不会被销毁 5.String运行时间较长 6.String适用于比较短而小的字符串 图1 StringBuffer: 1.StringBuffer创建的对象是可变的 2.它的改变不像String那样重新创建对象,而是通过构造方法(如图2) 3.StringBu
XGBoost的简单安装及入门使用
XGBoost安装及简单入门 XGBoost支持多种操作系统,如Windows, Linux, MacOS等,并支持多种语言版本,如Python, R, Scale, Java等。XGBoost的安装方式一般有两种,一种是直接通过pip安装(适合用于Python),另外一种是通过源码编译安装 1、通过pip安装 通过pip安装Python包既简单又方便,只需执行如下的命令: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xgboost 使用
String与StringBuffer的区别
1、String与StringBuffer的区别的 简单地说,就是一个变量和常量的关系.StringBuffer对象的内容可以修改;而字符串对象一旦产生后就不可以被修改,重新赋值其实是两个对象 StringBuffer的内部实现方式和字符串不同,StringBuffer的在进行字符串处理时,不生成新的对象,在内存使用上要优于串类。所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入,删除等...
Dify+MCP 双剑合璧:告别知识库模糊统计,让AI精准查询数据库数据!
本文详细介绍了如何通过Dify和MCP的结合,解决知识库在数据库查询中的模糊统计问题。通过MCP中间件将自然语言实时转换为SQL语句,实现精准数据查询,并支持SSE协议持续更新数据。文章包含MySQL环境搭建、MCP服务端部署、Dify工作流配置等实战步骤,帮助用户高效构建智能数据库查询系统。
斗罗大陆叙事体系与战斗系统设计解析
在文学创作与游戏设计中,世界观构建和战斗系统设计是两大核心技术要素。世界观作为故事发生的背景框架,需要融合东西方文化元素并建立量化标准,如《斗罗大陆》中武魂觉醒与魂环等级体系。战斗系统则需突破简单数值对抗,发展出武魂特性、魂技组合与环境互动的三维体系,其中魂导器技术的引入展现了科技与魔法的创新融合。这些设计原理在RPG游戏开发、网络文学创作等领域具有广泛应用价值,特别是对需要长期运营的IP作品,完善的系统设定能有效支撑剧情延展与商业化开发。本文以现象级作品为例,剖析其武魂拟态理论和魂师工业化构思如何成就经典
String、StringBuffer、StringBuilder的区别
首先new出来的对象肯定是会被放在堆内存中的,然后看abc是不是一个对象,首先会去常量池中查找,如果有,则不需要创建,没有就创建,所以会生成一个或者两个对象!,但是字符串常量一旦被声明不可以改变,但是字符串对象可以改变,但是改变的是其内存地址的指向。2)String使用“+”作为数据的连接操作,StringBuffer/StringBuilder使用append()方法进行数据连接。StringBuffer和StringBuilder类型是字符串变量,当使用append()等操作时,内存地址不发生改变。..
烽火HG680-LC刷机后体验:当贝纯净桌面+讯飞语音,老盒子秒变智能电视的折腾记录
本文详细记录了烽火HG680-LC机顶盒刷机后的使用体验,通过安装当贝纯净桌面和讯飞语音助手,老盒子焕发新生,实现无广告、快速响应的智能电视功能。文章对比了刷机前后的性能差异,分享了影音播放、语音控制等实用功能,并提供了ADB调试和问题解决的实用技巧,帮助用户将闲置的运营商盒子变身为高性能的智能影音中心。
java中String和StringBuffer的区别(转载)
看到这个讲解的不错,所以转一下 在java中有3个类来负责字符的操作。 1.Character 是进行单个字符操作的, 2.String 对一串字符进行操作,不可变类。 3.StringBuffer 也是对一串字符进行操作,是可变类。 String: 是对象不是原始类型. 为不可变对象,一旦被创建,就不能修改它的值. 对于已经存在的String对象的修改都...
硬件工程师入门进阶,一文搞懂,看这篇就对了
每家公司的datasheet都有严格的规范,及独特的风格,有时候还会穿插一些原理性的介绍,比如ADI公司的一些ADC/DAC器件资料里面,还会包含AD/DA转换的原理性讲解内容,Datasheet既可以是我们设计上的好帮手,也是学习的好资料。在出货量大的产品中,尽量减少物料种类,比如开头说的,1%的电阻不得不用,那么5%的替换成1%的,物料种类就减少一种,量就大了,能不能争取更优的价格呢?如果说前面学的是内功,那这一关,是招式、是工具的使用,原理图和PCB设计都有对应的工具,教程也很多,且比较容易上手。
【ComfyUI专栏】安装Triton组件
Triton是一款支持大模型推理的深度学习加速组件,最初仅支持Linux平台,现已通过开源社区适配Windows系统。针对SageAttention的安装,建议使用3.2.0Post10版本(该版本提供封装好的安装包,更高版本仅有源码)。用户可通过GitHub获取安装资源,或直接使用pip命令"pip install triton-windows"进行安装。安装时需注意:1)在虚拟环境中操作;2)使用管理员权限。相关资源链接已在文中提供。
String、StringBuffer和StringBuilder的区别
String、StringBuffer和StringBuilder的区别: 文章目录StringStringBufferStringBuilderStringBuffer是如何实现线程安全的呢?Java9的改进 String String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。 这个是String类的解释,之前小咸儿看...
Orin 调试GMSL camera 96712手册重点
96712基础理解
String 和StringBuffer的区别
2.String:在String类中没有用来改变已有字符串中的某个字符的方法,由于不能改变一个java字符串中的某个单独字符,所以在JDK文档中称String类的对象是不可改变的。1.StringBuffer:StringBuffer的内部实现方式和String不同,StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。上面的代码效率很高,因为只创建了一个StringBuffer对象,而下面的代码效率很低,因为创建了101个对象。
Probability and Statistics - 4th edition
Probability and Statistics - 4th edition
VB摄像头监控
该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制
String和Stringbuffer和Stringbuilder的区别
JAVA 中String和Stringbuffer和Stringbuilder的区别** java 中String和StringBuffer与StringBuilder的区别及使用方法 String 类 String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。 String a = “a”; //假设a指向地址0x0001 a = “b”;//重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不
VC中sqlite的使用
在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示
String 和 StringBuffer区别
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据.这个String类提供了数值不可改变的字符串.而这个StringBuffer类提供的字符串进行修改.当你知道字符数据要改变的时候你就可以使用 StringBuffer.典型地,你可以使用 StringBuffers来动态构造字符数据. 一、String的使用方法:
String和StringBuffer及StringBuilder的区别
String和StringBuffer及StringBuilder的区别 1、String类的内容是不可改变的。能改变的只是其内存指向。 2、String对象不可修改指的是对象本身不可修改,而不是引用不可修改。 3、StringBuffer类的对象内容是可以修改的。 4、String可以直接通过赋值的方式实现对象实例化,而StringBuffer只能通过构造方法的方式对象实例化。 5、StringBuffer在处理字符串的时候,不会生成新的对象。从内存这个角度来说,StringBuffer要比String更
String、StringBuffer和StringBuilder区别
String、StringBuffer和StringBuilder的区别: String String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。 这个是String类的解释,之前看到这个情况,不能理解上述的解释,如下 String a = "123"; a = "456"; // 打印出来的a为456 System.out.println(a) 看到这里,不明白了,这不是明明已经对他进行修改了吗?为什么还说他是一个不可变类呢? 经过学习
string,stringbuffer和stringbuilder的区别
string和stringbuffer和stringbuilder的区别: String:不可变字符序列;底层使用char[]存储; StringBuffer:可变字符序列;线程安全的,效率低;底层使用char[]存储; StringBuilder:可变字符序列;线程不安全的,效率高;底层使用char[]存储; 在单线程情况下执行效率大部分情况为:StringBuilder>StringBuffer>String – StringBuilder与StringBuffer有公共父类Abstr..
简述String、StringBuilder和StringBuffer的区别
三个都是java平台提供的字符串,都是可以用于存储和操作字符串。以下是他们的区别: 1、String是只读字符串,底层是被final修饰了,意味着String引用的字符串内容是不能被改变的; String str = “abc”; str = “bcd”; 实际上,这时候的str并不说是之前的str,由于第二步操作是直接创建新的对象然后进行赋值的,此时两个str所指向的地址是不同的; ...
String Builder和StringBuffer的区别
String Builder和StringBuffer的区别 资料来源参考:segment 一、背景 Java语言提供了三个字符串类:String类、StringBuilder类和StringBuffer类。String类是不可变字符串,StringBuilder和StringBuilder是可变字符串,三种字符串都是16位的Unicode字符序列,而且这三个类都被声明为final,因此不能被继承。 二、StringBuffer和StringBuilder的类结构 !StringBuffer和StringB
StringBuffer和String的区别
StringBuffer和String的区别
Java String、StringBuffer 和 StringBuilder 的区别
String 类型和 StringBuffer 的主要性能区别:String 是不可变的对象, 因此在每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,性能就会降低。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。
面试题:String和StringBuffer和StringBuilder的区别
面试题:String和StringBuffer和StringBuilder的区别面试题:String和StringBuffer和StringBuilder的区别题目分析题目回答 面试题:String和StringBuffer和StringBuilder的区别 题目分析 StringBuffer和StringBuilder是两个极为相似的两个类,它们都是可变的字符串。可以通过查看源码可知,它们的继承的类,实现的接口都是一样的。这两个类在实现上不同的地方基本有两点: StringBuffer在很多方法上加上了
String StringBuilder和StringBuffer的区别
在学习String类中会触及到StringBulider和StringBuffer,那么这三个类有什么区别呢? 运行速度 在这方面运行速度快慢为:StringBuilder > StringBuffer > String 为什么说String是最慢的呢? String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象...
638



被折叠的 条评论
为什么被折叠?



