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

时间:2018-09-19 10:33:03

标签: java string string-concatenation

我想问的是,在Java中执行以下语句后,创建了多少个对象。

String str = "a"+"b"+"c"+"d"

在我看来,只有一个对象和StringBuilder可以被创建。请纠正我,并解释其背后的逻辑。。谢谢。

1 个答案:

答案 0 :(得分:10)

简单的答案是零个对象。那是一个编译时间常数表达式,字节码编译器在创建“ .class”文件之前将其求值为"abcd"...。

实际上,对于现代JVM,与文字和编译时常数表达式相关联的String对象的实例化是很懒的,因此可以在第一次执行该语句时创建单个String对象。但是只有第一次时间。

因此,更正确的答案是零或一个String对象,具体取决于:

  • 字符串文字实习(懒惰或渴望)的JVM实现,以及
  • 这是否是使用"abcd"文字或编译时间常数的任何语句的第一次执行。

如果从未访问过str,则JIT编译器可能会优化该语句。

如果考虑到类卸载的可能性,它将变得更加复杂。