使用“+”运算符进行字符串连接后会创建多少个对象?

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线程安全的比较

StringBuilder

java 类加载器反射