Java学习札记14:一个比较String、StringBuffer和StringBuilder之间效率差别的简单例子
来源:互联网 发布:2015年淘宝销量排行榜 编辑:程序博客网 时间:2024/06/06 00:51
String:定长的字符串,它的内容是不可以改变的,正因为如此,编译器可以让字符串共享。
StringBuffer:可变长的字符串缓冲区,多线程操作是安全的,并且在字符串连接操作上提供了性能和效率都优于 String类 的 "+" 的 append() 方法。因此,如果需要大量的频繁的进行字符连接操作时,优先采用StringBuffer 的 append() 方法。如果只是简单的字符串连接可以采用 String 的 "+" 来提高代码的可读性。
StringBuilder:是 StringBuffer 的一个等价类,区别在于 StringBuilder 是非线程安全的,但正因为如此少了很多同步的操作,在效率上要高于 StringBuffer,因此如果不涉及多线程操作,可以优先考虑StringBuilder 来提高方法的执行效率。
代码示例:
public class StringTest {/*** main method** @param args*/public static void main(String[] args) {String s = "test";String str = "";long str_start = System.currentTimeMillis();for (int i = 0; i < 100000; i++) {str += s;}long str_end = System.currentTimeMillis();System.out.println("String need time is : " + (str_end - str_start));StringBuffer s_buffer = new StringBuffer("");long buf_start = System.currentTimeMillis();for (int i = 0; i < 100000; i++) {s_buffer.append(s);}long buf_end = System.currentTimeMillis();System.out.println("StringBuffer need time is :" + (buf_end - buf_start));StringBuilder s_builder = new StringBuilder("");long bui_start = System.currentTimeMillis();for (int i = 0; i < 100000; i++) {s_builder.append(s);}long bui_end = System.currentTimeMillis();System.out.println("StringBuilder need time is : " + (bui_end - bui_start));}}
运行结果如下:
String need time is : 129765StringBuffer need time is :10StringBuilder need time is : 3
String、StringBuffer 和 StringBuider 虽都属于字符串类型,但是在使用的时候不能混用,需要根据实际情况选择合适的字符串类型。
String 中 "+" 实现字符串连接分析:
示例代码:
public class PlusTest {public static void main(String[] args) {String a = "a";String b = "b";String c = a + b;String d = c + 1;}}
将上述代码编译后再反编译,得到的代码:
public class PlusTest {public PlusTest() {}public static void main(String args[]) {String a = "a";String b = "b";String c = (new StringBuilder(String.valueOf(a))).append(b).toString();String d = (new StringBuilder(String.valueOf(c))).append(1).toString();}}
通过反编译的结果可以看出,"+" 实现字符串连接的过程中,实际上是借助了 StringBuilder 类的 append()方法,每拼接一次都要实例化一个 StringBuilder 对象,效率低是必然的。
转载自:
http://moyunyu.iteye.com/blog/1455239
- Java学习札记14:一个比较String、StringBuffer和StringBuilder之间效率差别的简单例子
- java中String、StringBuilder和StringBuffer效率的比较
- String,StringBuffer,StringBuilder之间的差别
- Java学习札记13:浅析Java中的String、StringBuffer和StringBuilder的区别
- Java 中String、StringBuffer、StringBuilder的差别
- String,StringBuilder,StringBuffer效率比较
- JAVA数据结构之String、StringBuffer和StringBuilder之间的区别
- 关于String和StringBuilder、StringBuffer的一个简单性能测试
- 关于String和StringBuilder、StringBuffer的一个简单性能测试
- 关于String和StringBuilder、StringBuffer的一个简单性能测试
- String, StringBuilder, StringBuffer 之间的区别 - Java
- Java:String、StringBuffer、StringBuilder之间的区别
- String、StringBuffer和StringBuilder之间的区别
- String、StringBuffer和StringBuilder之间的区别
- String、StringBuilder和StringBuffer之间的区别
- String、StringBuffer和StringBuilder之间的区别
- String、StringBuffer和StringBuilder之间的区别
- String、StringBuffer和StringBuilder之间的区别
- 是否需要编程风格
- 日志工具 Commons Logging 的使用方法
- UVA 216 网络连线
- Javascript作用域原理
- 如何在Word中输入英语音标
- Java学习札记14:一个比较String、StringBuffer和StringBuilder之间效率差别的简单例子
- 当 Shell 遇见 Emacs -- 大话 Emacs Shell Mode(1)
- struts2 bean标签以及其他标签需要注意的地方
- JDBC上关于数据库中多表操作一对多关系和多对多关系的实现方法
- 做题笔记之-----母函数的相关应用
- Yii框架应用程序整合Ucenter实现同步注册、登录和退出等
- struts2.0 标签+ftl标签
- 当 Shell 遇见 Emacs -- 大话 Emacs Shell Mode(2)
- 3D显示原理