下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d"?

对于如下代码:

String s1 = "a";

String s2 = s1 + "b";

String s3 = "a" + "b";

System.out.println(s2 == "ab");

System.out.println(s3 == "ab");

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

Java会在编译时对字符串相加进行优化处理,如果整个表达式中所有参与运算的都是字符串直接量,Java会在编译时就把这个表达式的值计算出来,然后直接将结果赋值给字符串引用变量。因此上面题目中定义的String s = "a" + "b" + "c" + "d";实际上相当于直接定义了"abcd"的字符串直接量,所以,上面的代码应该只创建了一个String对象。

而且这个字符串直接量会被放入字符串缓存池中。如下两行代码,

String s = "a" + "b" + "c" + "d";

System.out.println(s == "abcd");

由于s引用了字符串缓存池中的"abcd"字符串,因此上面输出结果应该为true

原文地址:https://www.cnblogs.com/programb/p/14068493.html