字符串拼接,什么时候会走StringBuilder?
作者:叫我不矜持
www.jianshu.com/p/a80c9b2b89cd
前言
最近在突然想到了String字符串拼接问题,于是做了一个demo测试了一下,到底String类型的字符串在拼接的时候,哪种情况下会走会走StringBulider进行字符串拼接,而哪种情况编译器会对代码进行优化?话不多说,先看demo
一.问题
案例1
测试代码1.png
可以发现,str == str2的结果为false,那么我们在看看下一个例子。
案例2
测试代码2.png
这时候,两个字符串对比的结果为true。
二.探究问题
这时候,疑问就来了,为什么结果会不一致呢?利用在cmd窗口输入javap -c TestDemo.class命令,对字节码文件进行反编译,发现了问题所在?
测试代码1cmd.png
可以看到在案例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;
精彩推荐
一百期Java面试题汇总
SpringBoot内容聚合
IntelliJ IDEA内容聚合
Mybatis内容聚合
END
我知道你 “在看”
字符串拼接,什么时候会走StringBuilder?相关推荐
- 面试:字符串拼接,什么时候用StringBuilder?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | www.jianshu.com/p/a80c9 ...
- service 层 拼接的html 代码如何直接返回_字符串拼接,会走StringBuilder 吗?
前言 最近在突然想到了String字符串拼接问题,于是做了一个demo测试了一下,到底String类型的字符串在拼接的时候,哪种情况下会走会走StringBulider进行字符串拼接,而哪种情况编译器 ...
- java字符串拼接_字符串拼接,什么时候会走StringBuilder?
☞ 程序员进阶必备资源免费送「21种技术方向!」 ☜ 粉丝福利: 专属优惠码4折优惠,当当网买书满400-230(点击查看) 前言 最近在突然想到了 String 字符串拼接问题,于是做了一个 dem ...
- java 创建string对象机制 字符串缓冲池 字符串拼接机制 字符串中intern()方法...
字符串常量池:字符串常量池在方法区中 为了优化空间,为了减少在JVM中创建的字符串的数量,字符串类维护了一个字符串池,每当代码创建字符串常量时,JVM会首先检查字符串常量池.如果字符串已经存在池中,就 ...
- java 循环拼接字符串用分号隔开_Java 8中字符串拼接新姿势:StringJoiner
在为什么阿里巴巴不建议在for循环中使用"+"进行字符串拼接一文中,我们介绍了几种Java中字符串拼接的方式,以及优缺点.其中还有一个重要的拼接方式我没有介绍,那就是Java 8中 ...
- c++ 字符串拼接_字符串拼接新姿势:StringJoiner
来自:Hollis(微信号:hollischuang) 在为什么阿里巴巴不建议在for循环中使用"+"进行字符串拼接一文中,我们介绍了几种Java中字符串拼接的方式,以及优缺点.其 ...
- Java 8中字符串拼接新姿势:StringJoiner
在为什么阿里巴巴不建议在for循环中使用"+"进行字符串拼接一文中,我们介绍了几种Java中字符串拼接的方式,以及优缺点.其中还有一个重要的拼接方式我没有介绍,那就是Java 8中 ...
- java 创建string对象机制 字符串缓冲池 字符串拼接机制
对于创建String对象的机制,在这一过程中涉及的东西还是值得探究一番的. 首先看通过new String对象和直接赋值的方式有什么区别,看如下代码: public static void main( ...
- java 字符串拼接_JAVA字符串拼接常见方法汇总
字符串的拼接,常使用到的大概有4种方式: 1.直接使用"+"号 2.使用String的concat方法 3.使用StringBuilder的append方法 4.使用StringB ...
最新文章
- apue.h头文件(UNIX环境高级编程)
- Generating RSA keys in PKCS#1 format in Java--转
- 在Servlet中向客户端写Cookie信息
- 新浪短网址生成java_如何生成t.cn的短链接?新浪短网址怎么生成的?
- 规则引擎:大厂营销系统资格设计全解
- python接口测试jason_Python 接口测试之Json数据文件操作
- 凯撒密码pythin密码_凯撒密码术
- Leetcode算法题(C语言)11--有效的数独
- Flex通过Java读取Excel(详细流程)----Excel在客户端(DataGrid动态根据Excel生成)
- 25. Location hash 属性
- [2018.07.12 T2] B君的第二题
- SWMM代码移植到64位平台
- 青年志愿者演讲稿范⽂5篇
- linux文件系统程序设计实验报告,浙江大学Linux程序设计实验报告
- 磁流体和两相磁流体的无条件能量稳定解耦算法
- vue常用之“定义全局变量constants”
- 1.1 嵌入式系统的定义和组成
- 【踩坑】RTX30系列显卡的CUDA配置
- 删除/清除/过滤标点(所有中英文标点)的正则表达式——Desktop Search开发笔记【经验积累】
- iOS主题更换、音乐播放器、栏目管理、上传视频封面等源码
热门文章
- 淘宝、京东等下架火箭队相关商品,回应:涉及主权问题没有讨价还价余地
- 小米MIX 4概念渲染图曝光:无孔屏下摄像头果真科幻
- 快手副总裁林粼:快手将从事5G相关业务线研究布局
- 三星Galaxy Fold入网:屏幕故障+数次跳票 热度还有多少?
- 荣耀20发布会花式官宣:4!-3!+2!伦敦见
- 常用的sql语句用法
- c语言实现队列基本算法,【算法】队列的C语言实现
- java如何检测输入合法_使用java写的一个简易的计算器,可以检测输入是否合法。.doc...
- java中readline函数_自定义BufferedReader中read和readLine方法
- HTML实现选择数据库字段,django项目中在后台获取了数据库的某一列,如何将其显示在html模板中的select标签内的option选项下?...