Java中这段代码会创建多少个String对象?
Java字符串对象创建数量分析
先看这段代码:
String a="hello"; String b=a+"Bye";
问题:这段代码会创建多少个String对象?
你提到的两种情况里,正确的是会创建3个String对象,具体如下:
- 常量池中的
"hello":类加载阶段,字符串字面量"hello"会被放入字符串常量池(如果池中原本没有的话)。 - 常量池中的
"Bye":同理,字面量"Bye"也会在类加载阶段进入常量池(如果池中原本没有)。 - 堆内存中的
"helloBye":执行a+"Bye"时,编译器会将其转换为new StringBuilder(a).append("Bye").toString(),而toString()方法会在堆中生成一个新的"helloBye"字符串对象,这个对象不会自动进入字符串常量池。
关于append方法的疑问:
append方法不会将被追加的字符串放入常量池。"Bye"之所以在常量池,是因为它是字符串字面量,在类加载阶段就已经被加载到常量池里了,和append方法本身无关。
内容的提问来源于stack exchange,提问作者Joshua Samuel
相关产品推荐
相关产品推荐

