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

时间:2014-05-07 19:29:41

标签: java string

根据这个link,在代码String s="abc"+"xyz";中的java版本1.5之前,由于使用StringBuilder类进行编译器优化,只创建了一个对象。

new StringBuilder().append(abc).append(xyz).toString()

所以这意味着在java 1.5之前用于创建三个对象的字符串" abc" ,另一个" xyz"第三个" abcxyz"或者它使用像StringBuffer这样的其他类进行类似的编译器优化?

2 个答案:

答案 0 :(得分:6)

不,据我所知,总是被视为编译时常量,并且一直等同于

String s = "abcxyz";

请注意,Java 1.5引入了StringBuilder;在执行时字符串连接使用StringBuffer之前。

查看first edition of the JLS,已经存在关键句子:

  

字符串文字 - 或者更常见的是,作为常量表达式(第15.27节)值的字符串被“实现”,以便使用String.intern方法共享唯一实例(第20.12节) 0.47)。

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

答案 1 :(得分:4)

代码

String s="abc"+"xyz";

在编译时创建一个String文字。 Java一直都是这样做的。它在Java 5.0中没有改变。

如果你有像这样的代码

那么改变是什么
String abc = "abc";
String s = abc + "xyz";

在Java 1.0到1.4中,它使用StringBuffer来执行此操作。它在Java 5.0中被StringBuilder取代,因为如果你不需要线程安全它会更有效率,而在99.9%的情况下,你不需要。

相关问题