快捷搜索:  汽车  科技

阿里面试java算法题(为啥不提倡字符串拼接)

阿里面试java算法题(为啥不提倡字符串拼接)关注并私信我获取最新【阿里java开发手册泰山版】2、使用字节码的方式可以很好查看代码底层的执行,从而可以看出哪些实现效率高,哪些实现效率低;可以更好的对我们的代码做优化。让程序执行效率更高。反编译 javap -c Test.class ,接下来看结果,从反编译的结果看循环体内每拼接一次就会去new一个StringBuilder。那么,m2方法的字节码呢?我们可以看到是直接调用的append方法,而没有每循环一次new一个StringBuilder对象了。1、字符串拼接, 号和StringBuilder是相等的,但是在循环体内使用 StringBuilder 的 append 方法效率更优,尤其是数据量很大的情况下。

阿里规约

先来看阿里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。

阿里面试java算法题(为啥不提倡字符串拼接)(1)

反编译 javap -c Test.class ,接下来看结果,从反编译的结果看循环体内每拼接一次就会去new一个StringBuilder。

阿里面试java算法题(为啥不提倡字符串拼接)(2)

那么,m2方法的字节码呢?我们可以看到是直接调用的append方法,而没有每循环一次new一个StringBuilder对象了。

阿里面试java算法题(为啥不提倡字符串拼接)(3)

总结

1、字符串拼接, 号和StringBuilder是相等的,但是在循环体内使用 StringBuilder 的 append 方法效率更优,尤其是数据量很大的情况下。

2、使用字节码的方式可以很好查看代码底层的执行,从而可以看出哪些实现效率高,哪些实现效率低;可以更好的对我们的代码做优化。让程序执行效率更高。

关注并私信我获取最新【阿里java开发手册泰山版】

猜您喜欢: