知识点:编译器对字符串常量表达式进行优化
1.
String s1 = "abc";
String s2 = "a" + "b" + "c";
String s3 = "a" + "b" + "c" + ""; //这种我没试,应该也和前面两个一样的,你可以试试
String s4 = "a" + "b" + 'c';
前三种是一样的,因为编译器会对之后二种进行字符串常量表达式进行优化,变成第一种来操作:先查常量池,有就引用,没有就在常量池种创建再引用
第四种'c'是char类型,不是字符串常量,不能优化,这时用的是StringBuilder来append
2.
String s1 = "a";
String s2 = s1 + "b" + "c";
这种情况因为S1也是个字符串常量所以也会被优化成"abc"来处理
3.
String s1 = new String("a");
String s2 = s1 + "b" +"c";
这里S1是一个变量,因为它可以不是常量而是任何字符串,可能不在常量池中,所以不进行优化而是是用StringBuilder来append
如果还不懂百度关键词:Java常量表达式优化
|