每次拼接字符串的时候用习惯了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的数量减至最少,降低对象的创建数,大大提高性能。
分享到:
相关推荐
尽管手动拼接 SQL 字符串是一种简单有效的方法,但在实际项目中还应注意以下几点: 1. **安全性**:使用预编译语句(PreparedStatement)来避免 SQL 注入等问题。 2. **性能优化**:对于频繁执行的 SQL 语句,可以...
在Smarty模板中拼接字符串主要有几种方法: 1. 使用内置过滤器“cat”进行字符串拼接: 在Smarty中,可以使用“cat”过滤器来连接字符串和变量。cat是concatenate(连接、拼接)的缩写,其作用类似于PHP中的点...
本篇文章将深入探讨三种不同的PHP字符串连接方法,并分析它们的效率。 1. **直接使用`.`操作符进行连接** 第一种方法是使用`.`操作符来连接字符串。这种方法直观且易于理解,但在大量字符串连接时,效率较低。如上...
本文主要探讨了在Java中几种不同的字符串拼接方法的性能差异,包括使用操作符`+`、`String.concat()`、`StringBuffer.append()`和`StringBuilder.append()`。以下是对这些方法的详细分析: 1. **字符串拼接操作符 ...
4. 注意事项:虽然使用数组和join方法来拼接字符串可以提高性能,但在实际应用中还需要考虑其他因素。比如数组的初始大小、循环次数、字符串长度等。因为尽管减少了操作次数,创建和操作数组也会消耗一定的资源。...
本篇内容将深入探讨JavaScript中字符串连接的几种常见方式,并通过测试例子分析它们的效率。 首先,我们要了解JavaScript中字符串连接的基本方法: 1. 使用加号`+`:这是最直观的字符串连接方式,例如`str1 + str2...
python拼接字符串一般有以下几种方法: ①直接通过(+)操作符拼接 s = 'Hello'+' '+'World'+'!' print(s) 输出结果: Hello World! 使用这种方式进行字符串连接的操作效率低下,因为python中使用 + 拼接两个字符...
1. `StringBuffer` 和 `StringBuilder`: 这两者都是用来处理可变字符串的类,它们提供了`append`方法用于拼接字符串。`StringBuilder`是非线程安全的,而`StringBuffer`是线程安全的,因此在多线程环境下推荐使用`...
本文将深入探讨如何在Smarty中有效地拼接字符串。 首先,Smarty提供了两种主要的方式来完成字符串拼接:`{assign}`标签和过滤器(filter)功能。 1. `{assign}`标签: 在Smarty的早期版本中,`{assign}`标签是拼接...
尤其是在字符串长度达到几十K甚至几百K时,频繁使用“+=”进行拼接会极大地影响脚本执行效率,导致CPU使用率飙升。通过实例可以观察到,简单的循环拼接操作,耗时可以长达1.1秒,而且这还是在字符串长度仅为200K时的...
2. **使用`+`运算符(C++/C#等)**:在一些支持面向对象特性的语言如C++和C#中,可以使用`+`运算符直接拼接字符串,编译器会自动处理内存和拷贝操作。 3. **使用`StringBuilder`类(Java/C#)**:在Java和C#中,...
常见的字符串操作可能包括但不限于以下几种: 1. **字符串拼接**:将多个字符串合并为一个,这通常通过`+`运算符或者`join()`方法来实现。 2. **字符串分割**:使用`split()`函数将字符串按照指定分隔符进行切割,...
在易语言中,处理十六进制和字符串的转换主要有以下几种方法: 1. **字符串转十六进制**:在易语言中,可以通过“字符串到整数”函数配合“进制转换”参数将字符串转换为十进制,再用“十进制到十六进制”函数将十...
字符串是计算机科学中的一种基本数据结构,用于存储和操作文本信息。在编程语言中,字符串通常是由一个或多个字符组成的序列。字符串的处理涉及到多种算法和技术,这些在解决实际问题时至关重要,特别是在文本处理、...
总之,"PTA 6-13 函数实现字符串逆序"是一个基础但重要的编程练习,它可以帮助你深入理解和熟练掌握字符串操作、函数设计以及算法效率分析。通过解决这类问题,你可以提高编程技能,为更复杂的算法和数据结构挑战...
5. **字符串的模式匹配**:正则表达式(Regular Expressions)是一种强大的工具,可以用于复杂字符串的匹配、查找、替换等操作。Python中的`re`模块提供了相关的功能。 6. **字符串的排序与比较**:在处理大量字符...
当需要多次拼接字符串时,可以使用"+="操作符。每次拼接都会将新字符串追加到原来的字符串末尾: ```javascript var result = ""; result += "My name is Anders"; result += " and my age is 25"; ``` 上述...
本篇我们将深入探讨字符串管理的相关知识点,结合给定的“字符串管理”主题,我们主要讨论以下几个方面: 1. **字符串的基本操作**: - **创建字符串**:在不同编程语言中,如Python、Java或C++,创建字符串的方式...
2. 拼接效率:频繁使用`+`拼接字符串可能导致性能问题,此时可使用`StringBuilder`或`StringBuffer`(线程安全)来提高效率。 3. 字符串不可变性:Java中的字符串是不可变的,这意味着一旦创建,就不能改变其内容。...
1. 字符串操作:这包括创建、赋值、拼接、复制和比较等基本操作。例如,你可以使用`+`运算符将两个字符串连接起来,或者使用`==`来检查两个字符串是否相等。 2. 字符串索引与切片:通过索引,我们可以访问字符串中...