`
DoubleEO
  • 浏览: 157804 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

几种拼接字符串的效率问题

 
阅读更多
每次拼接字符串的时候用习惯了String,从来没想过用其他的class,最近看了看java性能的一些介绍书籍,很多东西以前都没想到,哎,还是经验太少。
拼接字符串,大致有3个class可以用,他们是String, StringBuffer,StringBuilder, StringBuilder是1.5中来代替StringBuffer的,我用的检验方法很简单,

就是
 long start = System.currentTimeMillis();
     //code here...
     long end = System.currentTimeMillis();
     long time = end -start;
     System.out.println(time);

其实我也不知道使用别的什么其他方法,许多工具可以检查性能,不过我基本没怎么用过。
    “+=”看起来效率高,比较短小,其实性能远不如append,看代码

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的数量减至最少,降低对象的创建数,大大提高性能。
分享到:
评论
3 楼 duronshi 2009-04-27  
1楼楼主你能否换个图片呀,这样给人看起来,真的非常难受。
别的就不多说了
2 楼 dongliwei122 2009-04-24  
拼接的时候换成字符串,再看看结果
1 楼 dongliwei122 2009-04-24  
public class Test {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
        long start = System.currentTimeMillis();  
        String s = new String("hello");  
        for (int i = 0; i < 15000; i++)  
        {  
            s+="拼接字符串的时间";  
        }  
        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("拼接字符串的时间");  
        }  
        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("拼接字符串的时间");  
        }  
        long end2 = System.currentTimeMillis();  
        long time2 = end2 -start2;  
        System.out.println("用StringBuilder append拼接字符串的时间"+time2);  
}

}
===============================================
===============================================
用String +=拼接字符串的时间25406
用StringBuffer append拼接字符串的时间0
用StringBuilder append拼接字符串的时间15

相关推荐

    ibatis拼接字符串

    尽管手动拼接 SQL 字符串是一种简单有效的方法,但在实际项目中还应注意以下几点: 1. **安全性**:使用预编译语句(PreparedStatement)来避免 SQL 注入等问题。 2. **性能优化**:对于频繁执行的 SQL 语句,可以...

    关于php几种字符串连接的效率比较(详解)

    本篇文章将深入探讨三种不同的PHP字符串连接方法,并分析它们的效率。 1. **直接使用`.`操作符进行连接** 第一种方法是使用`.`操作符来连接字符串。这种方法直观且易于理解,但在大量字符串连接时,效率较低。如上...

    JAVA的字符串拼接[参照].pdf

    本文主要探讨了在Java中几种不同的字符串拼接方法的性能差异,包括使用操作符`+`、`String.concat()`、`StringBuffer.append()`和`StringBuilder.append()`。以下是对这些方法的详细分析: 1. **字符串拼接操作符 ...

    浅谈jquery拼接字符串效率比较高的方法

    4. 注意事项:虽然使用数组和join方法来拼接字符串可以提高性能,但在实际应用中还需要考虑其他因素。比如数组的初始大小、循环次数、字符串长度等。因为尽管减少了操作次数,创建和操作数组也会消耗一定的资源。...

    关于js中连接字符串效率的测试例子!

    本篇内容将深入探讨JavaScript中字符串连接的几种常见方式,并通过测试例子分析它们的效率。 首先,我们要了解JavaScript中字符串连接的基本方法: 1. 使用加号`+`:这是最直观的字符串连接方式,例如`str1 + str2...

    smarty模板中拼接字符串的方法

    在Smarty模板中拼接字符串主要有几种方法: 1. 使用内置过滤器“cat”进行字符串拼接: 在Smarty中,可以使用“cat”过滤器来连接字符串和变量。cat是concatenate(连接、拼接)的缩写,其作用类似于PHP中的点...

    Python 中字符串拼接的多种方法

    python拼接字符串一般有以下几种方法: ①直接通过(+)操作符拼接 s = 'Hello'+' '+'World'+'!' print(s) 输出结果: Hello World! 使用这种方式进行字符串连接的操作效率低下,因为python中使用 + 拼接两个字符...

    for循环中如何正确使用字符串拼接

    1. `StringBuffer` 和 `StringBuilder`: 这两者都是用来处理可变字符串的类,它们提供了`append`方法用于拼接字符串。`StringBuilder`是非线程安全的,而`StringBuffer`是线程安全的,因此在多线程环境下推荐使用`...

    smarty基础之拼接字符串的详解

    本文将深入探讨如何在Smarty中有效地拼接字符串。 首先,Smarty提供了两种主要的方式来完成字符串拼接:`{assign}`标签和过滤器(filter)功能。 1. `{assign}`标签: 在Smarty的早期版本中,`{assign}`标签是拼接...

    JavaScript组合拼接字符串的效率对比测试

    尤其是在字符串长度达到几十K甚至几百K时,频繁使用“+=”进行拼接会极大地影响脚本执行效率,导致CPU使用率飙升。通过实例可以观察到,简单的循环拼接操作,耗时可以长达1.1秒,而且这还是在字符串长度仅为200K时的...

    链接任意多个字符串

    2. **使用`+`运算符(C++/C#等)**:在一些支持面向对象特性的语言如C++和C#中,可以使用`+`运算符直接拼接字符串,编译器会自动处理内存和拷贝操作。 3. **使用`StringBuilder`类(Java/C#)**:在Java和C#中,...

    字符串操作封装函数

    常见的字符串操作可能包括但不限于以下几种: 1. **字符串拼接**:将多个字符串合并为一个,这通常通过`+`运算符或者`join()`方法来实现。 2. **字符串分割**:使用`split()`函数将字符串按照指定分隔符进行切割,...

    易语言十六进制与字符串转换

    在易语言中,处理十六进制和字符串的转换主要有以下几种方法: 1. **字符串转十六进制**:在易语言中,可以通过“字符串到整数”函数配合“进制转换”参数将字符串转换为十进制,再用“十进制到十六进制”函数将十...

    数据结构-字符串.pptx

    字符串是计算机科学中的一种基本数据结构,用于存储和操作文本信息。在编程语言中,字符串通常是由一个或多个字符组成的序列。字符串的处理涉及到多种算法和技术,这些在解决实际问题时至关重要,特别是在文本处理、...

    广工数据结构课程设计字符串操作

    5. **字符串的模式匹配**:正则表达式(Regular Expressions)是一种强大的工具,可以用于复杂字符串的匹配、查找、替换等操作。Python中的`re`模块提供了相关的功能。 6. **字符串的排序与比较**:在处理大量字符...

    PTA 6-13 函数实现字符串逆序

    总之,"PTA 6-13 函数实现字符串逆序"是一个基础但重要的编程练习,它可以帮助你深入理解和熟练掌握字符串操作、函数设计以及算法效率分析。通过解决这类问题,你可以提高编程技能,为更复杂的算法和数据结构挑战...

    JavaScript中字符串拼接的基本方法

    当需要多次拼接字符串时,可以使用"+="操作符。每次拼接都会将新字符串追加到原来的字符串末尾: ```javascript var result = ""; result += "My name is Anders"; result += " and my age is 25"; ``` 上述...

    字符串管理

    本篇我们将深入探讨字符串管理的相关知识点,结合给定的“字符串管理”主题,我们主要讨论以下几个方面: 1. **字符串的基本操作**: - **创建字符串**:在不同编程语言中,如Python、Java或C++,创建字符串的方式...

    java字符串 详解 java实例20

    2. 拼接效率:频繁使用`+`拼接字符串可能导致性能问题,此时可使用`StringBuilder`或`StringBuffer`(线程安全)来提高效率。 3. 字符串不可变性:Java中的字符串是不可变的,这意味着一旦创建,就不能改变其内容。...

    字符串处理

    1. 字符串操作:这包括创建、赋值、拼接、复制和比较等基本操作。例如,你可以使用`+`运算符将两个字符串连接起来,或者使用`==`来检查两个字符串是否相等。 2. 字符串索引与切片:通过索引,我们可以访问字符串中...

Global site tag (gtag.js) - Google Analytics