service 层 拼接的html 代码如何直接返回_字符串拼接,会走StringBuilder 吗?
前言
最近在突然想到了String字符串拼接问题,于是做了一个demo测试了一下,到底String类型的字符串在拼接的时候,哪种情况下会走会走StringBulider进行字符串拼接,而哪种情况编译器会对代码进行优化?话不多说,先看demo
一.问题
案例1
可以发现,str == str2的结果为false,那么我们在看看下一个例子。
案例2
这时候,两个字符串对比的结果为true。
二.探究问题
这时候,疑问就来了,为什么结果会不一致呢?利用在cmd窗口输入javap -c TestDemo.class命令,对字节码文件进行反编译,发现了问题所在?
可以看到在案例1中,java代码底层走了StringBuilder,进行字符串拼接,然后调用了StringBuilder的toString方法。
测试代码2cmd.png
而案例2中,对class文件进行反编译,发现代码出现了一点变化,并没有走StringBuilder进行字符串拼接。
三.总结
1、案例1中,通过变量和字符串拼接,java是需要先到内存找变量对应的值,才能进行完成字符串拼接的工作,这种方式java编译器没法优化,只能走StringBuilder进行拼接字符串,然后调用toString方法,当然返回的结果和常量池中的111这个字符串的内存地址是不一样的,因此结果为false。
2、案例2中,直接在表达式里写值,java不用根据变量去内存里找对应的值,可以在编译的时候直接对这个表达式进行优化,优化后的表达式从 "111" + "" 直接变成了 "111" ,两个String类型的变量都指向了常量池的111字符串,因此结果为true;
作者:叫我不矜持
www.jianshu.com/p/a80c9b2b89cd
往期推荐
CTO说:Service层的接口是不是多此一举?
深入 Redis 主从复制的原理详解,权威又科学
不是每个打工人都能享受 996 的福报
阅读原文: 最新 3625页大厂面试题
service 层 拼接的html 代码如何直接返回_字符串拼接,会走StringBuilder 吗?相关推荐
- service 层 拼接的html 代码如何直接返回_代码分层的设计之道
分层思想,是应用系统最常见的一种架构模式,我们会将系统横向切割,根据业务职责划分.MVC 三层架构就是非常典型架构模式,划分的目的是规划软件系统的逻辑结构便于开发维护.MVC:英文即 Model-Vi ...
- service 层 拼接的html 代码如何直接返回_软件系统的分层,有效降低层与层之间的依赖...
在分解复杂的软件系统时,架构师和程序员用得最多的技术之一就是分层.个人学习开发的时候,软件系统大多数是三层架构,也就是大家非常熟悉的表现层.领域层(业务层).数据源层.随着互联网的发展,智能手机普及手 ...
- java字符串拼接_字符串拼接,什么时候会走StringBuilder?
☞ 程序员进阶必备资源免费送「21种技术方向!」 ☜ 粉丝福利: 专属优惠码4折优惠,当当网买书满400-230(点击查看) 前言 最近在突然想到了 String 字符串拼接问题,于是做了一个 dem ...
- c++ 字符串拼接_字符串拼接新姿势:StringJoiner
来自:Hollis(微信号:hollischuang) 在为什么阿里巴巴不建议在for循环中使用"+"进行字符串拼接一文中,我们介绍了几种Java中字符串拼接的方式,以及优缺点.其 ...
- c# 拼接字符串数组_C#_字符串拼接_浅
测试环境:Unity2018.4:.Net4.x.需要注意.Net4.x和3.5差异还是挺大的 写的内容大部分网上已有,算是总结他人的成果,是浅谈. 1.先说几条结论: 1_1.字符串在C#中是高频出 ...
- 拼接的option会多出空行_液晶拼接屏与墙面安装技巧
在安装液晶拼接屏时,往往我们会根据具体的安装环境推荐适合的安装方式,比如壁挂式.机柜式.焊接支架.双层铝型材等,每种安装方式也都有它的特点及要求,比如壁挂式最好在9块屏以下,以方便后期拆卸和维护,机柜 ...
- C语言_字符串拼接函数strcat使用及实现
字符串拼接函数strcat 01--字符串拼接函数strcat函数原型 char* strcat(char *dest, const char *src); 作用:把src所指向的字符串(包括&quo ...
- js字符串如何拼接java代码_JS如何定义用字符串拼接的变量
今天在写js的时候碰到了难题,我又一个页面需要生成很多的变量.但是变量的名称是根据参数的不同而区分的. 例如可能需要生成 date_1,date_2,datet_3... (后面的数字是根据参数来的) ...
- 常用的函数式接口_Consumer接口练习_字符串拼接输出
练习:格式化打印信息 题目 下面的字符串数组当中存有多条信息,请按照格式" 姓名:XX.性别:XX."的格式将信息打印出来.要求将打印姓名的动作作为第一个Consumer 接口的L ...
最新文章
- (原創) 如何將CMOS所擷取的影像傳到PC端? (SOC) (DE2) (TRDB-DC2)
- windows下启动/关闭Sybase数据库服务器
- Android 拍照是开启(调用)闪光灯(原创)
- 面试官:String的最大长度是多少?
- Spring容器中导入组件方式
- 挑选SaaS企业需要注意十要素
- 奥托尼克斯接近开关型号_萨科微SLKOR的MOS 场效应管应用范围和型号
- svn切换分支 如何判断 是否完成_SVN创建分支/合并分支/切换分支
- 国内高速前端 Unpkg CDN 替代方案
- elemnt的Table 表格使用注意事项
- ubuntu源列表(清华,阿里,官方,选一即可)
- 2021年CBA总决赛第二场预测
- 豪横C4D电商实用素材,从此横着走
- U盘安装ubuntu server 10.4
- wordpress上传文件报错的解决方法(413 Request Entity Too Large、超过upload_max_filesize文件中定义的php.ini值)
- 26.逻辑卷管理器(Logical Volume Manager)
- sql语句ding_在postgresql中结束掉正在执行的SQL语句操作
- J-Link RTT Viewer 的各种不爽以及解决方案
- 问卷与量表数据分析(SPSS+AMOS)学习笔记(二) :问卷设计的原则与注意事项
- SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模
热门文章
- BZOJ 4819: [Sdoi2017]新生舞会
- 牛客16464 神奇的幻方
- 计算机网络(二十六)-IP数据报分片
- idea中每次push/pull都需要输入账号密码
- 【剑指offer】面试题07. 重建二叉树(Java)
- oracle常见单词_Oracle中常见的英语单词
- 西门子plm_好事连连 西门子PLM新品多项合作并举
- xlwings 合并单元格 读取_xlwings,让excel飞起来
- Detected call of `lr_scheduler.step()` before `optimizer.step()`.
- 使用matplotlib画图时不能同时打开太多张图