0%

Java中String和StringBuilder区别

一直以来,字符串操作我都直接用String,今天发现有个StringBuilder,研究了一下,发现我一直都是用一种低效率的方法。简单记下区别。 String:对应的内存空间其实是不可改变的。执行字符串相加时,其结果是放在重新申请的新的空间,看下面的例子:

String a="a";
a+=a;

操作后,在Java新申请一个空间来存放结果”aa”,内存空间里存在两个值”a”,”aa”,Java只是把a指向了”aa”,并不是把”a”修改成”aa”。所以当相加操作多了以后,会浪费很多内存,垃圾回收GC就会开始工作。 而StringBuilder不同,它只在原有的内存空间进行修改,不会另辟空间。

StringBuilder sb=new StringBuilder();
sb.append("a");
sb.append("a");

上面的例子中,不管append执行了多少次,内存中始终只有一个值。 所以,为了提高性能,当你的变量值不变时(final),使用String,需要改变时,使用StringBuilder。 2014年1月1日注: 现在的编译器,会自动把String的加号操作符换成StringBuilder,所以最终执行是没有区别的。但是一种情况例外:在循环中相加,使用StringBuilder只需要在循环外创建一次,但如果直接用加号操作符,编译后每次循环都会创建一次StringBuilder。