使用“+”运算符进行字符串连接后会创建多少个对象?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用“+”运算符进行字符串连接后会创建多少个对象?相关的知识,希望对你有一定的参考价值。
我想问一下在java中执行以下语句后创建了多少个对象。
String str = "a"+"b"+"c"+"d"
在我看来,只应创建一个对象和StringBuilder的对象。请纠正我并解释它背后的逻辑......谢谢你。
答案
简单的答案是零对象。这是一个编译时常量表达式,字节码编译器在创建“.class”文件之前将其计算为"abcd"
。
实际上,对于现代JVM,与文字和编译时常量表达式相关联的String
对象的实例化是惰性的,因此可以在第一次执行该语句时创建单个String
对象。但只是第一次。
因此,更正确的答案是零或一个String
对象,具体取决于:
- 字符串文字实习(懒惰或渴望)的JVM实现,以及
- 这是否是使用
"abcd"
文字或编译时常量的任何语句的第一次执行。
如果永远不会访问str
,那么JIT编译器可能会优化该语句。
如果考虑类卸载的可能性,它会变得更加复杂。
以上是关于使用“+”运算符进行字符串连接后会创建多少个对象?的主要内容,如果未能解决你的问题,请参考以下文章
Swift:为什么三元运算符会创建数组的副本而不是引用原始数据?
实例的对比StringStringBuilder字符串的连接效率及StringBuilder和StringBuffer线程安全的比较