Java中字符串连接符(+)和append的区别

参考链接:https://www.jianshu.com/p/849f1d443b3a

文章结构:

  第一部分:对+的原理进行分析

  第二部分:+ 和 append 循环对比(贴出代码,以及分别循环后的反编译字节码,来对两者进行对比)

一: + 底层原理解析(+ 的底层是new StringBuilder 进行append)

1 String str1 = "hello";
2 String str2 = str1 + " coisini";
3 System.out.println(str2);

底层,其实在每一次 + 之前 都会new 一个StringBuilder对象,所以效率低,

上述代码,会被编译器按照如下顺序执行

  (使用javap -c 命令查看指令集,参考文章:https://www.cnblogs.com/coisini/p/9779283.html)

具体指令详解参考上一篇

https://www.cnblogs.com/coisini/p/9789412.html

二: + 和 append 循环对比 

  1):+ 号循环

1  long start = System.currentTimeMillis();
2 String str1 = "hello";
3 for(int i=0; i <10000000; i++){
4      String str2 = str1 + " coisini";
5 }
6 long end = System.currentTimeMillis();
7 System.out.println("开始-结束时间差"+(end-start));

 

循环次数少,用 + 和append 结果没差,为了对比结果,所以我循环次数多一点,这里没考虑堆栈溢出的问题,看,用了2.34秒

看一下反编译的字节码

  2)append做循环

long start = System.currentTimeMillis();
String str1 = "hello";
StringBuilder builder= new StringBuilder();
for(int i=0; i <10000000; i++){builder.append("coisni");
}
long end = System.currentTimeMillis();
System.out.println("开始-结束时间差"+(end-start));

 

反编译字节码,发现没,根本没有新创建对象

总结

 1): +的原理,每遇到一个+,就new StringBuilder然后用append

 2):性能,字符串拼接少,两者均可,拼接次数多,用append

生怕自己少截个图,会给阅读者,阅读造成麻烦,所以就啰嗦了点...

转载于:https://www.cnblogs.com/coisini/p/9778892.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百度seo排名点击器_SEO整站优化思路 - 百度seo排名点击

原出处&#xff1a;超级排名系统原文链接&#xff1a;SEO整站优化思路 - 超级排名系统整站优化的大体思路包括哪些&#xff1f;下面超级排名系统小编详细给大家讲解下&#xff1a;一、建站优化我们在建立网站之前与建立网站的时候需要做的优化&#xff0c;包括标题优化、描述关…

unity 天空盒_Unity自定义可编程渲染管线(SRP)(二)——编写第一个自定义SRP

一句话描述&#xff0c;我们可以把SRP分解成两个部分&#xff0c;分别是SRP Asset&#xff0c;SRP Instance。SRP AssetSRP Asset是一个Unity Asset文件&#xff0c;用来存储渲染管线的特定配置信息&#xff0c;包含的信息有&#xff1a;游戏物体是否应该投射阴影&#xff1b;使…

构建node.js基础镜像_在Android上构建Node.js应用程序

构建node.js基础镜像by Aurlien Giraud通过AurlienGiraud 在Android上构建Node.js应用程序 (Building a Node.js application on Android) 第2部分&#xff1a;Express和NeDB (Part 2: Express and NeDB) In Part 1 we saw how to use Termux, a Terminal emulator and Linux …

【design pattern】工厂方法模式和抽象工厂模式

前言 设计模式分为三大类&#xff1a; 创建型模式&#xff1a;工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式&#xff1b; 结构型模式&#xff1a;适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式&#xff1b; 行为型模式&#xff1…

linux中使用随机数

(1)单纯使用rand重复调用n次&#xff0c;就会得到一个0-RAND_MAX之间的伪随机数&#xff0c;如果需要调整范围&#xff0c;可以得到随机数序列后再进行计算。(2)单纯使用rand来得到伪随机数序列有缺陷&#xff0c;每次执行程序得到的伪随机序列是同一个序列&#xff0c;没法得到…

mysql 异地备份工具_异地备份简单实现(mysql)

该脚本只适用于MYISAM引擎&#xff0c;如果需要适用于innodb&#xff0c;请修改备份命令即可。#!/bin/bash#该脚本只能用来备份myisam引擎数据库#author&#xff1a;vaedit#date:2017/9/18#备份过程function beifen(){BACKDIRdate "%Y-%m-%d-%H"mkdir /backup/$BACKD…

python管理数据库设计_Pycharm+Django+Python+MySQL开发 后台管理数据库

Django框架十分简单易用&#xff0c;适合搭建个人博客网站。网上有很多教程&#xff0c;大多是关于命令行操作Django&#xff0c;这里分享一些用最新工具进行Django开发过程&#xff0c;主要是PyCharm太强大&#xff0c;不用有点可惜。第一次写技术开发类的博文&#xff0c;可能…

你鼓舞了我是世界杯主题曲吗_选择方法和鼓舞人心的网站列表

你鼓舞了我是世界杯主题曲吗by Kristoffer Andreasen通过克里斯托弗安德烈森 选择方法和鼓舞人心的网站列表 (The pick and choose approach and a list of inspirational websites) In the past couple of years I have created quite a few websites. In the beginning, I h…

共享程序集GAC

原文标题&#xff1a; 原文地址&#xff1a;https://www.cnblogs.com/1996V/p/9037603.html 共享程序集GAC 我上面说了这么多有关CLR加载程序集的细节和规则&#xff0c;事实上&#xff0c;类似于mscorlib.dll、System.dll这样的FCL类库被引用的如此频繁&#xff0c;它已经是我…

弹簧触摸开关原理图_10年老电工经验之谈:常见的开关电源那些事儿

随着电控系统中对控制回路安全性要求提高&#xff0c;控制回路的工作电压是越来越趋于直流低压化。由此&#xff0c;控制回路内各种使用直流电源的传感器、中小微型直流继电器等电器装置是日益增多。也正因如此&#xff0c;电控系统内不同品牌的开关电源也相应地多了起来。因牵…

erlang mysql连接超时_Erlang数据库-(一)Erlang与Mysql的连接

下载&#xff1a;http://download.csdn.net/detail/hjhjava/7088277把该文件的东西全部编译好&#xff0c;然后根据下面的解释就可以操作Mysql的。很简单~-record(row,{a1 0, a20}).%% 第一个参数是该链接的名字(根据它来操作Mysql)&#xff0c;第二参数是本机号(ip地址)%% &a…

SQL SERVER 中 GO 的用法2

具体不废话了&#xff0c;请看下文详解。 12345678910use db_CSharpgoselect *,备注casewhen Grade>90 then 成绩优秀when Grade<90 and Grade>80 then 成绩良好when Grade<80 and Grade>70 then 成绩及格else 不及格endfrom tb_Grade如果只是执行一条语句&…

js中判断值不等于undefined

文章&#xff1a;JS 中判断空值 undefined 和 null转载于:https://www.cnblogs.com/Tpf386/p/9804496.html

reddit_我在3天内疯狂地审查了Reddit上的50个投资组合,从中学到了什么。

redditI’ve always enjoyed critiquing applicants’ portfolios at the design studio where I work. And I also often ask for feedback on my own designs on Reddit’s webdev subreddit.我一直都很喜欢在我工作的设计工作室里评估申请人的作品集。 我也经常在Reddit的we…

【BZOJ1001】[BeiJing2006]狼抓兔子

挺简单一个题&#xff0c;最小割模板 我的感觉就是可能建图的时候会比较麻烦吧&#xff0c;毕竟三个方向。 #include <cctype> #include <climits> #include <cstdio> #include <cstring> #include <iostream>#define debug(x) std::cout <&l…

管理活动目录域服务实训_管理学院学生党支部开展实践教育基地服务活动

红星E校有态度 有温度 可关注为进一步加强党的建设&#xff0c;深化管理学院学生党支部与实践基地的互动性&#xff0c;2020年9月11至12日&#xff0c;管理学院学生党支部协助白鹤村村委实践基地完成第七次人口普查相关工作&#xff0c;共计6名预备党员参与。工作开始前的培训会…

mysql 汉编码 的选_peewee连接mysql汉语言数据编码_mysql

peewee连接mysql中文数据编码系统是win7 x64python 2.7.6的site.py里面编码设定为 utf-8py文件首行指定 #coding:utf-8mysql 5.5.38安装时指定代码为utf-8peewee的连接数据库代码为&#xff1a;db MySQLDatabase(host 127.0.0.1, user root, passwd 1, database mz, chars…

配置windows失败,还原更新,请勿关机

最近给同事装系统&#xff0c;偶尔会出现如下问题&#xff1a; 如果是这种情况&#xff0c;只能耐心等待了&#xff0c;因为关机也没用&#xff01; 转载于:https://www.cnblogs.com/lijy/p/5327844.html

使用Express和MongoDB构建简单的CRUD应用程序

by Zell Liew由Zell Liew 使用Express和MongoDB构建简单的CRUD应用程序 (Building a Simple CRUD Application with Express and MongoDB) For a long time, I didn’t dare venture into back end development. I felt intimidated because of my lack of an academic backgr…

python元类的使用_python中元类用法实例

本文实例讲述了python中元类用法&#xff0c;分享给大家供大家参考。具体方法分析如下&#xff1a;1.元类(metaclass)是用来创建类的类2.type(object):返回一个对象的类型&#xff0c;与object.__class__的值相同&#xff0c;type(name,bases,dict):创建一个新的type类型&#…