Java开发手册中为什么不建议在for循环中使用“+“进行字符串操作

场景

java开发手册中对于循环体中进行字符串的拼接要求如下:

【推荐】循环体内,字符串的连接方式,使用 StringBuilder 的 append 方法进行扩展。

说明:下例中,反编译出的字节码文件显示每次循环都会 new 出一个 StringBuilder 对象,然后进行 append操作,

最后通过 toString 方法返回 String 对象,造成内存资源浪费。

并且还提供了反例:

   String str = "start";for (int i = 0; i < 100; i++) {str = str + "hello";}

Java中字符串占位替换、字符串拼接、字符串与Collection互转的方式:

Java中字符串占位替换、字符串拼接、字符串与Collection互转的方式_霸道流氓气质的博客-CSDN博客

字符串的拼接的几种方式可以参考上面的博客。

除了使用+拼接字符串之外,还可以使用 String 类中的方法 concat 方法来拼接字符串。

示例代码:

        String a = "a";String b = "b";String c = a.concat(b);System.out.println(c);

注:

博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主

下面看一下Java中String的concat方法的源码

        //    public String concat(String str) {//        int otherLen = str.length();//        if (otherLen == 0) {//            return this;//        }//        int len = value.length;//        char buf[] = Arrays.copyOf(value, len + otherLen);//        str.getChars(buf, len);//        return new String(buf, true);//    }

首先创建一个字符数组,长度是已有字符串和待拼接字符串的长度之和,再把两个字符串的值复制到新的字符数组中,

并用这个字符数组创建一个新的String对象并返回。

为了验证上面for循环中让使用StringBuilder,而不让使用+,编写以下代码并对比耗时

        try(Cost cost = new Cost()){String aa = "aa";for (int i = 0; i < 100000; i++) {aa+="bb";}}try(Cost cost = new Cost()){StringBuilder aa = new StringBuilder();for (int i = 0; i < 100000; i++) {aa.append("bb");}}

耗时输出结果如下

        //cost:11565//cost:1

 

注意这里的代码耗时统计的方式可以参考

Java实战-基于JDK的LRU算法实现、优雅的实现代码耗时统计(Spring AOP、AutoCloseable方式):

Java实战-基于JDK的LRU算法实现、优雅的实现代码耗时统计(Spring AOP、AutoCloseable方式)_霸道流氓气质的博客-CSDN博客

分析原因:

在for循环中,每次都是new了一个StringBuilder,然后再把String转成StringBuilder,再进行append。

而频繁的新建对象当然要耗费很多时间了,不仅仅会耗费时间,频繁的创建对象,还会造成内存资源的浪费。

为了验证以上原因,我们对使用+进行拼接字符串的代码进行反编译查看

 

总结:

经过对比,我们发现,直接使用StringBuilder的方式是效率最高的。

因为StringBuilder天生就是设计来定义可变字符串和字符串的变化操作的。

但是,还要强调的是:

 1.如果不是在循环体中进行字符串拼接的话,直接使用+就好了。

2.如果在并发场景中进行字符串拼接的话,要使用StringBuffer来代替StringBuilder

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/353847.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

docker安装golang

最近玩 docker 比较多&#xff0c;试试安装 golang 操作系统&#xff1a;Linux 第一步 先看一下镜像&#xff1a; docker images 看一下我们目前的镜像中&#xff0c;是不是有go 如果有&#xff0c;版本不合适等&#xff0c;可以考虑删除&#xff0c;重新安装&#xff0c;也…

死亡空间2显卡测试软件,《激战2》官方显卡测试数据 A卡略胜N卡

在经过无数次测试后&#xff0c;《激战2》的开发人员从测试玩家处获得了无数的反馈和数据&#xff0c;今天ArenaNet针对硬件配置公布了相关数据&#xff0c;从数据中可以看到&#xff0c;在其他硬件不会成为瓶颈的情况下&#xff0c;AMD显卡帧数要比同等级Nvidia显卡略高&#…

linux运行激战2,在Deepin 20.1系统下可用Wine来模拟运行激战2游戏

经过实测并确定&#xff0c;在Deepin 20.1系统下可以用Wine来模拟运行激战2网络游戏&#xff0c;它的表现跟Windows下差不多&#xff0c;虽然是Wine&#xff0c;但这个游戏优化还是挺好的&#xff0c;我是核显玩的&#xff0c;帧数大概30左右吧&#xff0c;效果在预期之内。 效…

《从零开始的 RPG 游戏制作教程》第六期:设置怪物掉落物并部署关卡怪物

目录 1. 前言 2. 第一期&#xff1a;制作基础场景 3. 第二期&#xff1a;让勇者和怪物登场 4. 第三期&#xff1a;基础的数值设计 5.第四期&#xff1a;从理论的角度简单聊聊关卡 6.第五期&#xff1a;制作物品和技能 第六期&#xff1a;设置怪物掉落物并部署关卡怪物 …

五大移动GPU厂商

《谁能笑傲江湖&#xff1f;移动处理器门派那些事儿》一文中我们把2012年的移动处理器的厂商做了一番介绍&#xff0c;并按照各自的属性给划分了门派。既然把他们称为江湖门派&#xff0c;那么每一个门派总要有自己的绝活。移动处理器厂商中CPU基本都是源自ARM&#xff0c;同架…

趣谈网络协议-第二模块-底层网络知识详解:2最重要的传输层

趣谈网络协议-第二模块-底层网络知识详解:2最重要的传输层 1&#xff1a;第10讲 | UDP协议&#xff1a;因性善而简单&#xff0c;难免碰到“城会玩”TCP 和 UDP 有哪些区别&#xff1f;UDP 包头是什么样的&#xff1f;UDP 的三大特点第一&#xff0c;沟通简单第二&#xff0c;轻…

物联网-鸡舍项目总结

转自&#xff1a;http://mt.sohu.com/20160816/n464326503.shtml&#xff0c;在此向作者致敬&#xff0c;干货很多。 本系统采用五层架构&#xff1a;传感器/智能设备→采集器/智能终端→智能网关→云中间件/Web后台→网页/微信。 鸡舍一般需要监控的参数&#xff0c;包括光照、…

Python爬虫可视化第2季-舌尖上的“小龙虾”

前言&#xff1a; 上期内容与大家分享了一些旅游的内容&#xff0c;从本期开始&#xff0c;会陆续分享一些为吃货们量身定制的文章。世界杯激战正酣&#xff0c;大家在欣赏精彩比赛的同时&#xff0c;怎能少了美食的陪伴&#xff0c;我们今天就来聊聊世界杯的好丽友-小龙虾。 P…

华为的汽车“攻势”

数字化转型&#xff0c;对于传统汽车的从业者而言&#xff0c;看起来还是一个陌生的词汇。\n 然而&#xff0c;现实是&#xff0c;把汽车产品数字化&#xff0c;把企业运营数字化&#xff0c;把一切实体的东西数字化、虚拟化&#xff0c;将成为传统车企不得不直面的事关生死的…

三级pc技术_第十九周PC、笔电、数码周边新品汇总:AMD英特尔激战正酣

【dogkeji-科技犬】 各位网友周末好&#xff0c;又到了2020年第十九周的PC、笔电、数码周边新品发布汇总时刻&#xff08;2020年5月4日至2020年5月9日&#xff09;&#xff0c;那么本周有那些PC、笔电、数码周边新品发布呢&#xff1f;通过科技犬的汇总我们来一起回顾一下吧。 …

安全——网络安全协议的引入

TCP/IP安全缺陷 信息泄露 概述 网络中投递的报文往往包含账号、口令等敏感信息&#xff0c;若这些信息泄露则是灾难性的后果。其中嗅探是一种常见而隐蔽的网络攻击手段。 嗅探 概述 问题&#xff1a;在共享式网络架构下&#xff0c;所有的数据都是以广播方式进行发送&…

618价格激战下的苏宁悟空榜 映射零售进阶史

今年的电商价格战&#xff0c;给我的感觉是猛的一批。百亿补贴、J-10%、24期免息、直播低价促销、自有品牌产品降价不降质等等&#xff0c;一套价格组合拳打下来&#xff0c;让原本萎靡不振的消费市场又恢复到了以往的热闹烟火气息氛围中。 联想到8年之前的京东刘强东向苏宁发起…

汽车控制芯片赛道“激战”,高性能车规MCU全球首发

中国芯片厂商正在加速进入高端车载MCU&#xff08;微控制单元&#xff09;市场。 4月12日&#xff0c;芯驰科技重磅发布了ISO 26262 ASIL D级的高性能、高可靠、高安全、广覆盖的车规MCU产品——“控之芯”E3系列&#xff0c;该系列产品采用台积电22nm车规工艺&#xff0c;集成…

monkeyrunner2

最近,做android项目测试,测试一个应用程序在多个设备中分辨率是否合适,麻烦得要命,不停的截图比较,前一段时间,研究了一下monkeyrunner ,决定通宵写一个实用性强的monkeyrunner来方便测试使用 前一段时间写的monkeyrunner资料 http://youxilua.blog.51cto.com/3357586/772666 功…

梦三国解析服务器spl文件头失败,流沙恐遭降级?《梦三国2》MPL夏季赛第二轮激战全面开启...

逐梦巅峰&#xff0c;为荣耀而战&#xff01;2020《梦三国2》职业联赛(简称&#xff1a;MPL)夏季常规赛第一轮较量于上周正式结束&#xff0c;风月战队后来居上&#xff0c;通过6小局连胜将战队积分累积至14分&#xff0c;积分排名连跳3级成功登顶第四周积分榜首之位。常规赛半…

2017计算机最高配置,快来升级你的电脑:2017年单机大作配置要求一览

2017年&#xff0c;众多新游戏都蓄势待发&#xff0c;你的PC是否还能经受得住接连而来的游戏性能挑战呢&#xff1f;当然每个玩家所爱的游戏都是不一样的&#xff0c;所谓众口难调&#xff0c;并且各家厂商对游戏的优化程度也不尽相同&#xff0c;而且网游和单机对于硬件的要求…

对安装Linux的服务器进行缓存清除

安装Linux的服务器缓存过高导致服务器运行速度慢 第一步&#xff0c;查看当前服务器中Linux系统的状态。 命令&#xff1a;free -h 第二步&#xff1a;备份内存缓冲区中的数据到磁盘中。 命令&#xff1a;sync 在大多数情况下&#xff0c;不需要手动使用sync命令&#xff0…

英文的美好。。。

If You Could Choose If you had the power to decide what types of opportunities would come your way, what opportunities would you select? If you knew that your experiences would match your expectations, what would your expectations be?In fact, you do have…

中国独特词的英文表达(转)

发表文章 中国独特词的英文表达&#xff08;转&#xff09; 2006-10-06 16:54:57 大中小 1、中国意念词&#xff08;Chinesenesses&#xff09; 八卦 trigram 阴、阳 yin, yang 道 Dao&#xff08;cf. logo&#xff09; 江湖&#xff08;世界&#xff09; the jianghu World &…

文学-谚语-英文谚语:英文谚语

ylbtech-文学-谚语-英文谚语&#xff1a;英文谚语 英语谚语指流传于英国和美国的比较简练而且言简意赅的话语。英语谚语有一部分来自书面文献&#xff0c;主要出自希腊罗马神话、寓言故事、莎士比亚戏剧以及一些名家作品中。 1.返回顶部 1、 中文名&#xff1a;英语谚语 外文名…