Java高级篇-4-StringBuffer和StringBuilder
来源:互联网 发布:s60v2软件 编辑:程序博客网 时间:2024/06/16 13:18
前面一篇,我们介绍了String这个类,其中String类提供的一些方法中有些方法是基于StringBuffer实现的。在Java中如果涉及到频繁的字符串修改操作,建议采用StringBuilder和StringBuffer,肯定不用String类。肯定有人会问,StringBuilder和StringBuffer有什么区别呢?这个在面试中也经常被问道。就一句话,StringBuffer和StringBuilder的方法基本上是一样的,唯一的区别是StringBuffer是线程安全的,而StringBuilder不是。
StringBuilder和StringBuffer和String不一样,Stirng是不可变化的。但是StringBuilder和StringBuffer,它不是final的,可以修改。字符串最常见的操作就是添加和删除。这里写一个程序分别用String类和StringBuilder和StringBuffer,三种方法来对字符串添加的操作。看看分别耗时多少,而且前面一段提到StringBuilder不是线程安全,StringBuffer是线程安全。线程我们暂时不管,后面学习。线程安全,意味着有代价,那就是要慢一些。下面的例子,可以证明三种类对字符串添加操作的速度快慢对比。
package demo3;/** * create by Anthony on 2017/10/29 */public class StringBufferDemo { private static final int ITERATIONS = 100000; // 参考StringBuffer.java中的 initial capacity of 16 characters. private static final int BufferSize = 16; private void concatString(){ System.out.print("comcatString -> "); long startTime = System.currentTimeMillis(); String concat = ""; for(int i = 0; i< ITERATIONS; i++){ concat += i % 10; } long endTime = System.currentTimeMillis(); System.out.print("length: "+ concat.length()); // 统计循环整个过程时间 System.out.println(" time: "+ (endTime - startTime)); } //StringBuffer private void concatStringBuffer(){ System.out.print("concatStringBuffer -> "); long startTime = System.currentTimeMillis(); StringBuffer concat = new StringBuffer(); for(int i=0; i< ITERATIONS; i++){ concat.append(i % 10); } long endTime = System.currentTimeMillis(); System.out.print("length: "+ concat.length()); System.out.println(" time: "+ (endTime - startTime)); } //StringBuilder private void concatStringBuilder(){ System.out.print("concatStringBuilder -> "); long startTime = System.currentTimeMillis(); StringBuilder concat = new StringBuilder(); for(int i=0; i< ITERATIONS; i++){ concat.append(i % 10); } long endTime = System.currentTimeMillis(); System.out.print("length: "+ concat.length()); System.out.println(" time: "+ (endTime - startTime)); } public static void main(String args[]){ String str = new String("Hello "); str += "BeiJing"; StringBuffer strb = new StringBuffer("Hello "); strb.append("BeiJing"); StringBuilder strd = new StringBuilder("Hello "); strd.append("BeiJing"); StringBufferDemo st = new StringBufferDemo(); System.out.println("Iterations:" + ITERATIONS); System.out.println("Buffer:" + BufferSize); st.concatStringBuffer(); st.concatString(); st.concatStringBuilder(); }}
运行结果:
Iterations:100000Buffer:16concatStringBuffer -> length: 100000 time: 16comcatString -> length: 100000 time: 4859concatStringBuilder -> length: 100000 time: 4
结论就是,从操作效率来看:StringBuilder > StringBuffer > String。 所以,如果不考虑线程安全角度,尽量多用StringBuilder来操作字符串的修改。
阅读全文
0 0
- Java高级篇-4-StringBuffer和StringBuilder
- Java StringBuffer和StringBuilder
- java Stringbuilder和Stringbuffer
- java高级特性之--String 、StringBuffer、StringBuilder
- java String,StringBuffer和StringBuilder
- java-StringBuffer和StringBuilder…
- java基础---StringBuilder 和 StringBuffer
- Java StringBuffer和StringBuilder类
- java String,StringBuffer和StringBuilder
- java 中的StringBuilder和StringBuffer
- Java StringBuffer和StringBuilder类
- Java StringBuffer和StringBuilder类
- java之StringBuffer和StringBuilder
- Java StringBuffer和StringBuilder类
- Java String、StringBuffer和StringBuilder
- Java StringBuffer和StringBuilder类
- java中的stringbuilder和stringbuffer
- Java StringBuffer和StringBuilder类
- 【poj 1061】 青蛙的约会
- 一季度共 34 家 AI 创业公司被收购,谷歌和苹果是购买主力
- Unity抛物线动画
- COMOUTEX 2017开展在即 打造多元化科技盛宴
- KMP算法(next回退分析)
- Java高级篇-4-StringBuffer和StringBuilder
- 使用poi技术导出下载excel表格
- 【noip2012普及】摆花
- 传饿了么将获10亿美元投资,阿里、蚂蚁金服继续领投
- 小米Max 2发布,雷军说这是大号iPhone 7 Plus
- 在柯洁大战AlphaGo的今天,人类再次回想起曾经被IBM深蓝支配的恐惧
- 一数科技:我们想做的不是智能手表,而是探索下一代移动终端形态
- bzoj 4318(期望dp)
- mybatis知识点(二)