每当我尝试在字符串中添加数字时:
String s=new String(); for(int j=0;j<=1000000;j++) s+=String.valueOf(j);
我的程序正在添加数字,但速度很慢.但当我改变我的程序并使它像:
StringBuffer sb=new StringBuffer(); for(int j=0;j<=1000000;j++) sb.append(String.valueOf(j));
我很快得到了结果.为什么会这样?
解决方法
s = String.valueOf(j);每次调用时都需要分配一个新的String对象,这很昂贵.当包含的字符串太大时,StringBuffer只需要增加一些内部表示,这种情况发生得更少.
如果使用StringBuilder,它可能会更快,这是StringBuffer的非同步版本.
需要注意的一点是,虽然这确实适用于循环和许多其他情况,但它并不一定适用于使用以下连接字符串的所有情况:
String helloWorld = getGreeting() + "," + getUsername() + "!";
在这里,编译器可能会以它认为合适的方式优化代码,这可能会也可能不会创建StringBuilder,因为这也是一项昂贵的操作.