阿里规约
先来看阿里java开发手册的第22条,循环体内,字符串的连接方式,使用 StringBuilder 的 append 方法进行扩展。
说明:下例中,反编译出的字节码文件显示每次循环都会 new 出一个 StringBuilder 对象,然后进行 append操作,最后通过 toString 方法返回 String 对象,造成内存资源浪费。
反例:
String str = "start";
for (int i = 0; i < 100; i++) {
str = str + "hello";
}
反编译
我么先写一个类测试一下是否是这样的呢?眼见为实,耳听为虚,Let`s go。
反编译 javap -c Test.class ,接下来看结果,从反编译的结果看循环体内每拼接一次就会去new一个StringBuilder。
那么,m2方法的字节码呢?我们可以看到是直接调用的append方法,而没有每循环一次new一个StringBuilder对象了。
总结
1、字符串拼接,+号和StringBuilder是相等的,但是在循环体内使用 StringBuilder 的 append 方法效率更优,尤其是数据量很大的情况下。
2、使用字节码的方式可以很好查看代码底层的执行,从而可以看出哪些实现效率高,哪些实现效率低。可以更好的对我们的代码做优化。让程序执行效率更高。
关注我,并后台回复关键字【手册】获取最新的阿里java开发手册【泰山版】