字符串的拼接,StringBuffer性能上还是远远优于String的

详细剖析Java字符串三剑客:String、StringBuffer与StringBuilder Java字符串处理类String、StringBuffer和StringBuilder的核心区别与使用场景: 不可变性:String不可变,适合存储常量;StringBuffer/StringBuilder可变,适合频繁修改 线程安全:String天生安全,StringBuffer通过同步方法保证安全,StringBuilder非线程安全 性能表现:单线程下StringBuilder性能最优,多线程需使用StringBuffer 适用场景: String:常量配置、少量操作 StringBuffer:多线程 阅读详情

真是不好意思,在Java Doc里看到一句话就以为String已经优化到可以和StringBuffer一样快了。原文地址

让大家争论了一把。我现在来做个试验:

        long startTimeStamp;
        long endTimeStamp;

        for (int j = 0; j < 20; j++) {
            String s = "";
            StringBuffer sb = new StringBuffer();

            startTimeStamp = (new Date()).getTime();
            for (int i = 0; i < 5000; i++) {
                s = s + String.valueOf(i);
            }
            endTimeStamp = (new Date()).getTime();
            System.out.print(String.valueOf(endTimeStamp - startTimeStamp));

            System.out.print("-----");
            startTimeStamp = (new Date()).getTime();
            for (int i = 0; i < 5000; i++) {
                sb.append(String.valueOf(i));
            }
            endTimeStamp = (new Date()).getTime();
            System.out.println(String.valueOf(endTimeStamp - startTimeStamp));
        }

结果如何呢:

469-----0
453-----0
453-----0
453-----0
453-----0
453-----0
453-----0
454-----0
453-----0
453-----0
515-----0
454-----0
453-----0
468-----0
454-----0
437-----16
437-----0
453-----0
438-----0
438-----0

试验证明,差距是很明显的,Java的编译器还没有聪明到自动转换String的拼接。

我的电脑是AMD 2500,1G内存。JDK1.5.0.5

不知道 Xuefeng 说的“ Optimize Performence ”是什么IDE的功能,我在javac里面没找到,在eclipse里面也没找到。 也不知道Xuefeng有什么证据说编译器优化成了StringBuffer。

不知道 Xuefeng 说的“ Optimize Performence ”是什么IDE的功能,我在javac里面没找到,在eclipse里面也没找到。 也不知道Xuefeng有什么证据说编译器优化成了StringBuffer。

不知道 Xuefeng 说的“ Optimize Performence ”是什么IDE的功能,我在javac里面没找到,在eclipse里面也没找到。 也不知道Xuefeng有什么证据说编译器优化成了StringBuffer。


解决Android UVCCamera stopPreview 报错 崩溃 闪退 问题 在使用libuvccamera库的UVCCamera时,经常在调用stopPreview关闭预览的时候,app直接崩溃闪退了,经过综合各种修改源码的方案,已解决这个问题,以下请参考: 首先找到android_usbfs.c,linux_usbfs.c两个原文件,在两个文件中都可以找到这段代码,按如下示例修改: 修改前: for (i = 0; i < num_urbs; i++) { if (urb == tpriv->iso_urbs[i]) { urb_idx = i + 1; 阅读详情

相关推荐

达梦DM8整合Seata AT模式实战:手把手教你搞定分布式事务(含源码修改避坑)

本文详细介绍了达梦DM8数据库与Seata AT模式的深度整合实战,包括环境准备、架构设计、源码适配及分布式事务落地。通过独创性源码改造,解决了Seata官方对达梦数据库AT模式支持的限制,为国产数据库在微服务架构中的应用提供了可靠的事务保障。

weixin_30764771的博客 332

String与StringBuffer存储字符串的效率的对比

因此,在频繁进行字符串修改的情况下,StringBuffer 的效率通常比 String 高,尤其是当需要对一个字符串进行多次修改时。然而,在不需要频繁修改字符串内容的情况下,使用 String 也是合适的。

qq_46130027的博客 659

光纤接口类型与应用场景全解析

本文全面解析了光纤接口的类型与应用场景,详细介绍了SC、LC、FC和ST等主流光纤接口的特点及适用环境。从数据中心的高密度布线到工业环境的极端条件,提供了专业的接口选型指南和实战经验,帮助读者根据具体需求选择最合适的光纤接口方案。

weixin_29289821的博客 411

如何比较StringBuffer字符串内容是否相等

String的equals方法因为重写了Object的equals方法,所以可以比较字符串的内容,而StringBuffer因为没重写equals方法,直接继承了Object的equals方法,所以不行。可以使用toString() 方法将StringBuffer的内容转换为String 字符串,再使用equals()方法比较。

qq_63553733的博客 761

实战指南:在摩尔线程GPU上部署AI模型的完整流程

本文提供了一份详尽的实战指南,手把手教你如何在摩尔线程GPU上成功部署AI模型。内容涵盖从驱动安装、Docker环境配置,到核心的代码适配与模型运行全流程,并分享了性能调优技巧与常见避坑方法,旨在帮助开发者高效利用国产硬件进行AI应用开发。

weixin_29271263的博客 541

大话西游2经典单机版V8:一键架设+GM全功能+仙玉自由修改

本文详细介绍大话西游2经典单机版V8的一键架设教程和GM全功能使用指南,包括仙玉自由修改技巧。该版本无需虚拟机,解压即玩,完美还原官服经典玩法,支持离线运行,是老玩家重温经典和新玩家体验游戏的理想选择。

weixin_27303545的博客 1132

JavaSE——StringBuffer与StringBuilder拼接字符串详细解释

但是我们下面又追加了一个“wohenhao”,因为StringBuffer下面的byte数组并没有被final修饰,所以此时就会对字符串进行改变,将“6666”与“wohenhao”进行拼凑,而我们那个“6666”字符就会被垃圾回收机给回收掉,但是!首先我们刚开始是什么也没有的,我们追加了一个6666,但是不是字符串的形式,此时会把他转化成字符串,现在我们字符串常量池中就有“6666”这个字符串了;但是我们会发现,我们在字符串拼接的时候出现了两个字符串的形式,那这两个字符串会出现在字符串常量池中么?

weixin_51351637的博客 2121

迟滞电压比较器电路的原理与计算

迟滞电压比较器是一种具有双阈值特性的电路,通过正反馈机制实现抗噪声干扰功能。文章详细分析了其工作原理,包括同相型和反相型两种结构的电压阈值计算与电阻设计方法,并提供了已知门限求电阻和已知电阻求门限的推导公式。工程应用中需注意输出类型匹配、电阻取值范围、噪声裕量设计等问题。该比较器在信号处理、波形转换等场景中具有重要应用价值,设计时需综合考虑供电电压、参考电压和噪声特性等因素。

硬核科技 2680

(JAVA):字符串的拼接插入-----StringBuffer类的常见API

前言: 1、StringBuffer类的初始化 注意: StringBuffer在字符串操作上克服了String拼接会产生多个对象的问题。它可以以一个字符串作为参数进行初始化。 常见的三种初始化: 第一种: StringBuffer str1 = new StringBuffer(); //无参构造函数初始化 第二种: StringBuffer str1 = new StringBuffer("ting"); //使用字符串对象进行初始化 第三种: ...

yzh2776680982的博客 3070

ATT MTU 交换机制:提升 BLE 数据传输效率的关键

在低功耗蓝牙(BLE)技术的面试中,ATT MTU 交换机制始终是高频考点。无论是芯片厂商的固件开发岗,还是物联网设备的协议栈调试岗,面试官都爱通过这个知识点考察候选人对 BLE 数据传输底层逻辑的理解。本文将系统梳理核心考点,结合历年真题详解应答思路,轻松应对这类问题。​

byte轻骑兵的技术小窝 2411

SOME/IP协议详解「1.1·面向服务与面向信号」

面向信号和面向服务的区别,和举例子

雪云飞星的博客 5654

String和StringBuffer的比较

相同点: 它们都可以存储和操作字符串 不同点: 1.String类提供了数值不可改变的字符串,修改的只是它的一个副本    StringBuffer类可以对本身的对象进行修改 String s1 = new String("123"); String s2 = s1; s1 = s1.concat("456"); System.out.println(s1); System.ou

AlwenZwei的博客 1535

Spring AI Alibaba实战训练营-28 手把手教你用SAA+ Nacos 构建分布式 MCP 应用

本文介绍如何使用Spring AI Alibaba和Nacos构建分布式MCP应用,实现AI模型与工具服务的动态发现和调用。主要内容包括:1) 项目架构设计,包含MCP Server、Nacos注册中心和MCP Client三个核心组件;2) 环境准备要求,如Java 17+、Maven 3.6+、Nacos 3.1.0+等;3) 详细实施步骤:启动Nacos服务、注册MCP服务端、配置MCP网关聚合服务、设置MCP客户端发现机制。通过这种架构,开发者可以轻松扩展新工具服务,无需修改客户端代码,实现服务动态

program哲学 311

字符串拼接之String、StringBuilder、StringBuffer

字符串拼接之String、StringBuilder、StringBuffer 在写Java代码的过程中,我们经常会用到字符串的拼接,但是你知道他们的区别?废话不多说,直接上测试代码。 一. 效率比较 1. String拼接代码 public static String testString(int appendTimes) { String str =...

既无风雨也无晴 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

拼接字符串String、StringBuilder、StringBuffer比较

字符串拼接,很简单的一个操作,JDK给出了几种不同的拼接方法,还提供了对应封装类。早在JDK1.0的时候就提供了StringBuffer这个类用来做字符串的拼接,为了多线程下的线程安全问题,在StringBuffer类中的方法上都加了synchronized锁,这种考虑是没有问题的。后续为了提高单线程下(不存在线程安全问题)字符串的拼接效率,JDK1.5提供了StringBuilder类,这个类里面的方法是完全放开的,没有锁竞争对性能的消耗。 在公司的实际开发中,很多人知道用StringBuffer和Str

IT-CRUD 783

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

StringBuffer与StringBuilder拼接字符串时的区别

jdk版本为1.8 StringBuffer与StringBuilder继承自同一父类AbstractStringBuilder,append的源码分别为 StringBuffer @Override public synchronized StringBuffer append(String str) { toStringCache = null; ...

nayi_224的博客 1311

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

详解String,StringBuffer,StringBuilder

一、通过代码测试三者进行字符串拼接的性能 对String,StringBuffer,StringBuilderString,StringBuffer,StringBuilderString,StringBuffer,StringBuilder三者各做6000次字符串拼接,观察其分别使用的内存和时间。 /** * 对String,StringBuilder,StringBuffer进行字符串拼接性能比较 */ public class String_StringBuilder_StringBuffer {

qq_39924622的博客 296

使用 String 和 StringBuffer 拼接效率谁更高?

代码演示 这里我们设定循环10w次来拼接一个字符串, 比较代码如下 public static void main(String[] argss) { long l = System.currentTimeMillis(); show2(); System.out.println(System.currentTimeMillis()-l); } public static void show1() { String

龚小帅的博客 762

string stringbuffer stringbuilder的区别。

string stringbuffer stringbuilder都可以存储字符串,但是string存储时会创建额外的对象,频繁操作时,会额外产生大量的临时变量。 而stringbuilder与stringbuffer不会 如下: string: package com.csdu.test; public class HelloWorld { public ...

weixin_44566725的博客 116

Java StringBuilder、StringBuffer和String的对比

1、效率: StringBuilder > StringBuffer > String 分析: ①Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。 ②String在java中是不可变长的,一旦初始化就不能修改长度,简单的字符串拼接其实是创建新的String对象,再把拼接后的内容赋值给新的对象,在频繁修改的情况下会频...

guangtouwj的专栏 309

String、StringBuffer及StringBuilder区别

文章目录1. String2. StringBuilder3. StringBuffer 1. String String是不可变的,每次修改String实际上是创造了一个全新的String。 可以看下面的例子。 public class HelloWorld { public static void main(String[] args) { String s = "he...

大黄奔跑 158

String和StringBuffer的效率

String和StringBuffer的效率

wengyupeng 蜗牛一步一步向前。。。 7568

快速记忆理解String,StringBuffer,StringBuilder

关于String不可变特性的原因 1,String赋值时会产生一个对象 String 其实本身是一个比较特殊的类。通常我们为String的赋值方式为String str=“abc” 这样进行赋值。我们同样可以构造方法的方式来为它进行赋值,String str=new String(“abc”); ...

weixin_42329970的博客 642

java stringbuffer原理_String,StringBuilder,StringBuffer 实现原理解析

定义:从jdk1.5开始提供的新的封装字符串的类,StringBuilder,其字符串拼接操作的效率远远高于 String。Java里面提供了String,StringBuffer和StringBuilder三个类来封装字符串简介:我们知道字符串其实就是由若干个字符线性排列而成的,可以理解为字符数组Array,那么既然是数组实现的,那就需要考虑到数组的特性,数组在内存中是一块连续的地址空间块,即在...

weixin_36411269的博客 529

String,StringBuilder,StringBuffer 实现原理解析

定义: 从jdk1.5开始提供的新的封装字符串的类,StringBuilder,其字符串拼接操作的效率远远高于 String。 Java里面提供了String,StringBuffer和StringBuilder三个类来封装字符串 简介: 我们知道字符串其实就是由若干个字符线性排列而成的,可以理解为字符数组Array,那么既然是数组实现的,那就需要考虑到数组的特性,数组在内存中是一块连续的地址空间块,即在定义数组的时候需要指定数组的大小 换言之, 数组就分为可变数组和不可变数组。可变数组能够动态插入和删除

weixin_43829047的博客 343

String、StringBuffer、StringBuilder

String、StringBuffer、StringBuilder 一直是 java 面试中较为热点的问题,一般作为一个开场问题。那么这三者之间有什么区别,如何根据场景来选择使用,本文将基于三者的源码、性能、以及面试常问点来进行分析。 一、String、StringBuffer、StringBuilder 底层源码 String类 看一下 String 类的类图,它实现了 CharSequence 接口,也就是说 String 是 CharSequence 类型. 它的底层是被 final 修饰的字符

zjh的博客 284
上一篇: 关于Hard Code的思考 - 程序员的管理不能简单使用制度
下一篇: 孔子
decision
博客等级 码龄21年 0粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值