我正在学习并准备获得Java SE 6认证.我使用的是Kathy Sierra和Bert Bates的书“ Sun Java 6认证程序员学习指南”.我实际上是在Strings,I / O和Parsing.
他们提供了一个我可能希望在考试中看到的那种恶魔般的String问题的示例:
String s1 = "spring ";
String s2 = s1 + "summer ";
s1.concat("fall ");
s2.concat(s1);
s1 += "winter ";
System.out.println(s1 + " " + s2);
What is the output? For extra credit, how many String objects and how
many reference variables were created prior to the println statement?
Answer: The result of this code fragment is spring winter spring
summer. There are two reference variables, s1 and s2. There were a
total of eight String objects created as follows: “spring”, “summer ”
(lost), “spring summer”, “fall” (lost), “spring fall” (lost), “spring
summer spring” (lost), “winter” (lost), “spring winter” (at this point
“spring” is lost). Only two of the eight String objects are not lost
in this process.
我在标题中的问题非常具体.如您所见,他们说总共有8个String对象,但是,在println方法调用处会发生什么?它传递一个String对象引用作为参数,因此s1加上s2的值应该创建另一个String对象,因为它是不可变的,将计数增加到9.
但是(可能甚至更多)s1和s2值之间的空String(“”)是否不应该创建其他对象,从而将计数增加到10?
当他们这样做时,它很重要:
s1.concat(“fall “);
所以,为什么不这样:
s1.concat(s1 + ” ” + s2);
或真正的,这:
System.out.println(s1 + ” ” + s2);