将在String s ="abc"+"xyz"中创建多少个String对象; 在Java 1.5的早期版本中?

sou*_*jee 4 java string

根据此链接,在代码中的Java 1.5版本中,String s="abc"+"xyz"; 由于使用StringBuilder类进行编译器优化,因此只创建了一个对象.

new StringBuilder().append(abc).append(xyz).toString()
Run Code Online (Sandbox Code Playgroud)

那么这意味着在java 1.5 String之前用于创建三个对象一个"abc",另一个"xyz"和第三个"abcxyz"OR然后它使用其他类如StringBuffer进行类似的编译器优化?

Jon*_*eet 6

不,据我所知,它一直被视为编译时常量,并且一直相当于

String s = "abcxyz";
Run Code Online (Sandbox Code Playgroud)

注意Java 1.5的介绍StringBuilder; 在使用执行时字符串连接之前StringBuffer.

看一下JLS的第一版,已经存在关键句子:

字符串文字 - 或者更一般地说,作为常量表达式(第15.27节)值的字符串是"实例化",以便使用String.intern(第20.12.47节)方法共享唯一实例.

(第15.27节包括字符串连接.)