我想问的是,在Java中执行以下语句后,创建了多少个对象。
String str = "a"+"b"+"c"+"d"
在我看来,只有一个对象和StringBuilder可以被创建。请纠正我,并解释其背后的逻辑。。谢谢。
答案 0 :(得分:10)
简单的答案是零个对象。那是一个编译时间常数表达式,字节码编译器在创建“ .class”文件之前将其求值为"abcd"
...。
实际上,对于现代JVM,与文字和编译时常数表达式相关联的String
对象的实例化是很懒的,因此可以在第一次执行该语句时创建单个String
对象。但是只有第一次时间。
因此,更正确的答案是零或一个String
对象,具体取决于:
"abcd"
文字或编译时间常数的任何语句的第一次执行。如果从未访问过str
,则JIT编译器可能会优化该语句。
如果考虑到类卸载的可能性,它将变得更加复杂。