您的位置:首页 > 其它

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

2016-02-22 16:21 330 查看
知识点:编译器对字符串常量表达式进行优化

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: