java字符串拼接_字符串拼接,什么时候会走StringBuilder?
粉丝福利:
专属优惠码4折优惠,当当网买书满400-230(点击查看)
前言
最近在突然想到了 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字符串拼接_字符串拼接,什么时候会走StringBuilder?相关推荐
- JAVA的MySQL字符串拼接_字符串的拼接-MYSQL
SQL允许两个或者多个字段之间进行计算,字符串类型的字段也不例外.比如我们需要以"工号+姓名"的方式在报表中显示一个员工的信息,那么就需要把工号和姓名两个字符串类型的字段拼接计算: ...
- c++ 字符串拼接_字符串拼接新姿势:StringJoiner
来自:Hollis(微信号:hollischuang) 在为什么阿里巴巴不建议在for循环中使用"+"进行字符串拼接一文中,我们介绍了几种Java中字符串拼接的方式,以及优缺点.其 ...
- c++ 字符串拼接_源码上看 .NET 中 StringBuilder 拼接字符串的实现
专注分享C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协 ...
- Java学习笔记_字符串/静态static
字符串的特点 字符串的内容永不可变 正是因为字符串不可改变,所以字符串是可以共享使用的 字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组 创建字符串的常见3+1种方式 三种 ...
- java string范围_字符串索引超出范围? (Java,子字符串循环...
我正在为COSC课程制作的该程序编译不正确,但我不断收到错误消息: 线程"主"中的异常java.lang.StringIndexOutOfBoundsException:字符串索引 ...
- delphi 字符串占用空间_字符串在Python内部是如何省内存的
起步 Python3 起,str 就采用了 Unicode 编码(注意这里并不是 utf8 编码,尽管 .py 文件默认编码是 utf8 ). 每个标准 Unicode 字符占用 4 个字节.这对于内 ...
- mongodb 字符串 截取_字符串截取
字符串: 一:substr() substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符. stringObject.substr(start,length) 参数描述 star ...
- java对字符串归一化_字符串归一化
5 import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc=ne ...
- java 反写_字符串反写(学习)
今天想起了之前的一个问题,反写字符串的方法. 1. public class shouxie { public static void main(String[] args) { String str ...
最新文章
- java soap协议头_java – 服务器无法识别HTTP标头“SOAPAction”的值
- Java Web(11) Spring MVC 返回Json
- Eclipse调试Debug技巧
- Windows 技巧篇-设置我的漂亮桌面
- 图卷积神经网络_深度层次化图卷积神经网络
- 快速判断一个数是否是2的幂次方
- @dynamic 模拟NSManagedObject类的内部实现,AFN的非常规用法
- sql server序列_SQL Server中的序列对象
- h3c,nat网络地址转换
- 机器学习基础:评价指标(Machine Learning Fundamentals: Evaluation Metrics)
- 假设检验_关于假设检验与P值的几点看法
- java类 uuid_Java常用类——UUID类
- OPenGL 学习笔记之 Assimp 知识
- android汤姆猫的实验报告,毕业设计(论文)-基于Android的会说话的汤姆猫的设计与实现.doc...
- eovs实训报告总结心得_实训报告心得体会范文大全
- LinuxC——指针
- 欧拉角、四元数与旋转
- 智慧城市的互联网云脑架构,7种城市神经反射弧的建设是重点
- dell笔记本耳机怎么设置_对戴尔系统上的耳机/麦克风插孔问题进行故障排除
- 数模第五次作业:自己实现斯皮尔曼相关系数
热门文章
- EL4.1配置文件管理浅谈(1)
- 字符串比较中NSNumericSearch选项的工作原理
- 题解 P3978 【[TJOI2015]概率论】
- Unity设置播放模式下始终先执行指定的场景
- 深入理解 RecyclerView 系列之一:ItemDecoration
- 如何用java实现使用电子邮件控制你的电脑
- 利用mysqldump 将一个表按条件导出数据
- 揭开网络编程常见API的面纱【下】
- 4月第1周回顾:微软向雅虎发最后通牒 头号***伏法
- 如何在重装SAV10.1/SCS3.1服务器后继续管理原来的客户端