面试官:为啥不提倡字符串拼接?看阿里java开发手册告诉你答案

阿里规约

先来看阿里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开发手册【泰山版】

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章