标签:roman 字符串 优化 变量 应该 abc java 表达式 str
对于如下代码:
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。
下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d"?
标签:roman 字符串 优化 变量 应该 abc java 表达式 str
原文地址:https://www.cnblogs.com/programb/p/14068493.html