zoukankan      html  css  js  c++  java
  • Java几种拼接字符串的效率问题

    代码
    public class StringTest   
    {   
        
    public static void main(String[] args)   
        {   
            
    long start = System.currentTimeMillis();   
            String s 
    = new String("hello");   
            
    for (int i = 0; i < 15000; i++)   
            {   
                s
    +=i;   
            }   
            
    long end = System.currentTimeMillis();   
            
    long time = end -start;   
            System.out.println(
    "用String +=拼接字符串的时间"+time);   
               
            
    long start1 = System.currentTimeMillis();   
            StringBuffer sb 
    = new StringBuffer("hello");   
            
    for (int i = 0; i < 15000; i++)   
            {   
                sb.append(i);   
            }   
            
    long end1 = System.currentTimeMillis();   
            
    long time1 = end1 -start1;   
            System.out.println(
    "用StringBuffer append拼接字符串的时间"+time1);   
               
            
    long start2 = System.currentTimeMillis();   
            StringBuilder builder 
    = new StringBuilder("hello");   
            
    for (int i = 0; i < 15000; i++)   
            {   
                builder.append(i);   
            }   
            
    long end2 = System.currentTimeMillis();   
            
    long time2 = end2 -start2;   
            System.out.println(
    "用StringBuilder append拼接字符串的时间"+time2);   
        }   
    }   
    打印结果:   
    用String 
    +=拼接字符串的时间3984  
    用StringBuffer append拼接字符串的时间31  
    用StringBuilder append拼接字符串的时间0  

    当然这个时间取决于你计算机的速度,不过可以看出,Buffer和Buildr相差无几,而String就慢许多了
    原因:
        查看程序的字节码,你就会明白了,原因是String类本身是final类型,他不能更改,所以拼接时,它会使用StringBuffer,并调用append,之后再调用toString方法,每次都要这样,StringBuffer再转换成String时,代价是很大的。这是它慢的主要的一些原因。不仅创立了临时对象StringBuffer,还每次完后再要转成String。
        而 StringBuilder的出现就是用来替换StringBuffer的,所以应该尽可能StringBuilder来拼接,将转为String的数量减至最少,降低对象的创建数,大大提高性能。

    接下来,讲StringBufferStringBuilder的使用场合。

      我们已知:StringBuffer是线程安全的,速度较慢的;而StringBuilder是不安全的,速度较快的。

      那么我们要分析一下,是保证线程安全,还是追求速度。

      我们在进行web项目开发时,通常会使用框架,那就要看看使用的框架是单线程的还是多线程的,如果框架是线程安全的,那我们就可以追求速度,使用StringBuilder即可。如果是不安全的,那最好使用StringBuffer

  • 相关阅读:
    Business English E-mail
    向数据库更新数据
    遍历DataTable
    Convert SqlDataReader to DataTable
    (十七)map、flatMap和reduce方法的补充
    (4)六顶思考帽
    (3)学习方法思维导图
    (十六)call、apply、bind的实现以及区别
    (十五)关于继承
    (十四)防抖和节流
  • 原文地址:https://www.cnblogs.com/interdrp/p/1831726.html
Copyright © 2011-2022 走看看