String s="a"+"b"+"c"+"d";创建了几个对象?

对于如下代码:

package reviewTest;

/**
 * @ClassName: StringTest
 * @Description: 测试String的字符串相加优化
 * @author Kingram
 * @date 2018年7月27日
 *
 */
public class StringTest {

    public static void main(String[] args) {
String s1
= "a"; String s2 = s1 + "b"; String s3 = "a" + "b"; System.out.println(s2 == "ab"); System.out.println(s3 == "ab"); String s = "a" + "b" + "c" + "d"; System.out.println(s == "abcd"); } }

第一条语句打印的结果为false,第二条语句打印的结果为true,

说明javac编译可以对字符串常量直接相加的表达式进行优化,不必要等到运行期再去进行加法运算处理,而是在编译时去掉其中的加号,直接将其编译成一个这些常量相连的结果。

题目中的代码被编译器在编译时优化后,相当于直接定义了一个”abcd”的字符串,所以,题目答案应该只创建了一个String对象。

程序最后一条打印语句的结果应该为true。

posted @ 2018-07-27 10:48  Kingram  阅读(3553)  评论(7编辑  收藏  举报