String s="a"+"b"+"c"究竟在内存创建了几个对象

来源:互联网 发布:淘宝拍照单反相机 知乎 编辑:程序博客网 时间:2024/05/22 19:53
知识点:编译器对字符串常量表达式进行优化
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
0 0
原创粉丝点击