面试官:说说这段代码存在什么问题?
《Java开发手册》是阿里巴巴集团技术团队的经验总结 , 经历了多次不断实战的检验及不断完善 , 公开到业界后 , 众多社区开发者踊跃参与 , 共同打磨完善 , 系统化地整理成册 。
手册的愿景是码出高效 , 编程高质量的程序 。
字符串处理看似简单 , 却在面试中层出不穷 。 做出来关于字符串的题目简单 , 能够完全准确地写出来并不容易 。
笔者有次面试时 , 面试官就问了这样一个问题 , 说说这段代码存在什么问题?
String str = ''start''; for(int i=0; i<100; i++){ str = str + ''hello''; }【面试官:说说这段代码存在什么问题?】这个问题其实关于循环体内的字符串连接方式使用 StringBuilder的append方法进行拓展 。
在《Java开发手册》就有提到 , 值得留意 。
阿里原话:
【推荐】循环体内 , 字符串的连接方式 , 请使用 StringBuilder 的 append 方法进行扩展 。
说明:因为反编译出的字节码文件显示每次循环都会 new 出一个 StringBuilder 对象 , 然后进行append 操作 , 最后通过 toString 方法返回 String 对象 , 造成内存资源浪费 。
大概意思是用StringBuilder连接字符串性能要比 String + 的方式要好 , 因为占用内存资源更少 。
要怎么才能更加直观的得知循环体内的字符串连接方式使用String+性能低呢?对此我们可以尝试用时间开销来对比 。
long begTime = System.currentTimeMillis(); StringBuilder sb = new StringBuilder(''start''); for (int i = 0;i 多次输出:StringBuilder消耗时间:3
String消耗时间:404
StringBuilder消耗时间:2
String消耗时间:481
StringBuilder消耗时间:4
String消耗时间:507
在时间方面 , String消耗的时间确实比StringBuilder多得多 。
本文插图
对比 String 与 StirngBuilder 的源码 。
String源码
private final char value[]; // 本质是字符数组常量 , 所以不可变 public String() { this.valuehttp://news.hoteastday.com/a/= ''''.value; }StringBuilder
public StringBuilder() { // StringBuilder 类继承 AbstractStringBuilder 抽象类 // 创建长度 16 的字符数组 super(16); } // 字符串拼接 public StringBuilder(String str) { super(str.length() + 16); append(str); }AbstractStringBuilder
AbstractStringBuilder(int capacity) { value = http://news.hoteastday.com/a/new char[capacity]; }总结
字符串拼接 , 虽然字符串是不可变的 , 但还是可以通过新建字符串的方式来进行字符串的拼接 。
常用的字符串拼接方式有以下几种方式
- String+
- concat
- StringBuilder
- StringBuffer
- StringUtils.join
建议优先使用StringBuilder , 但不是在循环体中进行字符串拼接的话 , 直接使用+就好了 。
但要是在并发场景中进行字符串拼接的话 , 就要使用StringBuffer来代替StringBuilder 。 因为StringBuffer是线程安全的 。
StringBuilder和StringBuffer有什么区别?具体分析请戳 了解更多
由于笔者水平有限 , 文中纰漏之处在所难免 , 权当抛砖引玉 , 不妥之处 , 请大家批评指正 。
-END-
作者:洪生鹏 擅长java、Android、qt、小程序平台开发 。
- 海峡导报大宁德|太坑!宁德这段路,过往车辆直喊”疼“
- |支付宝面试题:如果你是支付宝的产品经理,如何让更多人用支付宝点外卖?
- 立方娱乐|肖战找到突破口?新歌上亿收入投进公益,这次不只是说说而已
- 北青网娱乐朴宝剑接受海军宣传团面试 或将于8月31日入伍
- 日本迎来最大规模“远程面试季”
- #说说#今天是六一儿童节,说说小时候的那些珍贵回忆
- 【文案】六一领证文案朋友圈说说 6.1儿童节领结婚证可爱句子
- 『文案』6月你好文案朋友圈早安语录 六一快乐说说唯美句子
- 『搞笑幽默』六一儿童节说说搞笑幽默句子怎么写 六一儿童节心情短语
- [儿童节]朋友圈搞笑的61儿童节说说 2019六一儿童节说说搞笑句子