整体内容介绍
本文分为几个部分: * String、StringBuffer、StringBuilder的对比 * 字符串拼接方式的对比 使用到的内容: * Junit4单元测试 * slf4j的日志框架
String、StringBuffer、StringBuilder的对比
对于这三者使用的场景做如下概括(参考:《编写搞质量代码:改善java程序的151个建议》):
字符串拼接方式对比package com.zy.util;import org.junit.Test;import org.slf4j.Logger;import org.slf4j.LoggerFactory;{private final Logger logger = LoggerFactory.getLogger(this.getClass());() {String s = “”;long ts = System.currentTimeMillis();for (int i = 0; i < 10000; i++) {s = s + String.valueOf(i);}long te = System.currentTimeMillis();//System.out.println(“+ cost {} ms:”+(te-ts));logger.info(“+ cost {} ms”, te – ts);}() {String s = “”;long ts = System.currentTimeMillis();for (int i = 0; i < 10000; i++) {s = s.concat(String.valueOf(i));}long te = System.currentTimeMillis();//System.out.println(“concat cost {} ms:”+(te-ts));logger.info(“concat cost {} ms”, te – ts);}() {StringBuffer sb = new StringBuffer();long ts = System.currentTimeMillis();for (int i = 0; i < 10000; i++) {sb.append(String.valueOf(i));}sb.toString();long te = System.currentTimeMillis();//System.out.println(“StringBuffer cost {} ms:”+(te-ts));logger.info(“StringBuffer cost {} ms”, te – ts);}() {StringBuilder sb = new StringBuilder();long ts = System.currentTimeMillis();for (int i = 0; i < 10000; i++) {sb.append(String.valueOf(i));}sb.toString();long te = System.currentTimeMillis();//System.out.println(“StringBuilder cost {} ms:”+(te-ts));logger.info(“StringBuilder cost {} ms”, te – ts);}}
上述程序结果如下:
testPlus信息: + cost 504 mstestConcat信息: concat cost 196 mstestStringBuffer信息: StringBuffer cost 2 mstestStringBuilder信息: StringBuilder cost 2 ms
可以看出,+和concat的方式速度较慢,需要创建新串。 而StringBuffer和StringBuilder较快。
参考资源不足地方使用javap进行反编译,具体再做分析
人若勇敢就是自己最好的朋友