码:
String s = "a" + "b" + "c";
Run Code Online (Sandbox Code Playgroud)
我想知道将为此语句创建多少个对象.
字符串池中将有一个字符串对象.在编译时"a" + "b" + "c"被解决"abc"(参见JLS§15.28),所以你所拥有的相当于
String s = "abc";
Run Code Online (Sandbox Code Playgroud)
这里没有StringBuilder涉及,与重复问题所接受的答案相反.你甚至可以在字节码中看到这个:
LDC "abc"
ASTORE 1
Run Code Online (Sandbox Code Playgroud)
从上面的JLS链接:
类型的编译时常量表达式
String总是"实例化",以便使用该方法共享唯一实例String.intern.