- 浏览: 21624 次
- 性别:
- 来自: 杭州
最新评论
1.3 StringBuilder类
一个String对象的长度是固定的,不能改变它的内容,或者是附加新的字符至String对象中。您也许会使用+来串联字符串以达到附加新字符或字符串的目的,但+会产生一个新的String实例。如果程序对这种附加字符串的需求很频繁,并不建议使用+来进行字符串的串联。在面向对象程序设计中,最好是能重复运用已生成的对象,对象的生成需要内存空间与时间,不断地产生String实例是一个没有效率的行为。
J2SE 5.0提供java.lang.StringBuilder类,使用这个类所产生的对象默认会有16个字符的长度,您也可以自行指定初始长度。如果附加的字符超出可容纳的长度,则StringBuilder对象会自动增加长度以容纳被附加的字符。如果有频繁作字符串附加的需求,使用StringBuilder会让程序的效率大大提高。通过下面的简单测试程序就可以知道效能差距有多大。
Ü 范例6.5 AppendStringTest.java
public class AppendStringTest {
public static void main(String[] args) {
String text = "";
long beginTime = System.currentTimeMillis();
for(int i = 0; i < 10000; i++)
text = text + i;
long endTime = System.currentTimeMillis();
System.out.println("执行时间:" + (endTime - beginTime));
StringBuilder builder = new StringBuilder("");
beginTime = System.currentTimeMillis();
for(int i = 0; i < 10000; i++)
builder.append(String.valueOf(i));
endTime = System.currentTimeMillis();
System.out.println("执行时间:" + (endTime - beginTime));
}
}
在范例6.5中首先使用+来串联字符串,使用System.currentTimeMillis()取得for循环执行前、后的系统时间,这样就可以得知for循环执行了多久。以下是我的计算机上的测试数据:
执行时间:4641
执行时间:16
可以看到执行的时间差距很大,这说明了使用+串联字符串所带来的负担。如果有经常作附加字符串的需求,建议使用StringBuilder。事实上就范例6.5来说,第二个for循环执行时间还可以更短,因为append()也可以接受基本数据类型,所以不必特地使用String.valueOf()方法从int取得String。改为以下的方式,执行时间可以大幅缩短:
for(int i = 0; i < 10000; i++)
builder.append(i);
使用StringBuilder最后若要输出字符串结果,可以用toString()方法。可以使用length()方法得知目前对象中的字符长度,而capacity()可返回该对象目前可容纳的字符容量。另外,StringBuilder还有像insert()方法可以将字符插入指定的位置,如果该位置以后有字符,则将所有的字符往后移;deleteChar()方法可以删除指定位置的字符,而reserve()方法可以反转字符串。详细的使用可以查询java.lang.StringBuilder的API文件说明。
StringBuilder是J2SE 5.0才新增的类,在J2SE 5.0之前的版本若有相同的需求,则使用java.lang.StringBuffer。事实上,StringBuilder被设计为与StringBuffer具有相同的操作接口。在单机非多线程(Multithread)的情况下使用StringBuilder会有较好的效率,因为StringBuilder没有处理同步(Synchronized)问题。StringBuffer则会处理同步问题,如果StringBuilder会在多线程下被操作,则要改用StringBuffer,让对象自行管理同步问题。关于多线程的概念,会在第15章详细说明。
<!-- page -->发表评论
-
Java反射Reflection--运行时生成instance
2009-11-18 10:17 1361文章来自: 博客浙江(blog.zj.com) 原文参考:ht ... -
Java反射经典实例 Java Reflection
2009-11-18 10:12 780http://jeplove.blog.zj.com/blog ... -
JProfiler试用手记
2009-04-13 16:00 840JProfiler是一款Java的性能监控工具。可以查看当前应 ... -
优化SQL的另一种思维1 性能调整综述
2009-04-12 17:34 1301作者: Peak Wong, 出处:IT专家网, 责任编辑: ... -
利用Oracle 10g SQL优化器(STA)优化语句(1)
2009-04-12 16:57 1814作者: fuyuncat 来源: w ... -
JAVA基础--JAVA中的反射机制详解
2009-02-25 22:41 778JAVA反射机制 JAVA反射机制是在运行状态中,对于任 ... -
Java中int和Integer的区别详解
2009-02-23 21:18 1169Java中int和Integer关系是比较微妙的。关系如下: ... -
Portal(门户)是什么--IT术语
2009-02-23 21:12 3125Portal 的组成可以分为 ... -
Java的内存泄漏
2009-02-20 18:13 794一 问题的提出 Java ... -
JDK核心API:Java1.5语言新特性简单总结
2009-02-20 18:05 10241. 自动装箱与拆箱 对应C# 例1.1 ... -
优秀Java程序员必须了解GC的工作原理
2009-02-20 17:57 895一个优秀的Java程序员必 ... -
转:大型互联网网站架构心得之一
2009-02-06 22:10 1136我们知道,对于一个大 ... -
一 CVS服务器的安装:
2008-12-28 18:43 1384一 CVS服务器的安装: 1。查看你的操作系统上是否安装了C ... -
Jive论坛与Spring框架的经典结合
2008-12-28 15:42 975没有一种新技术是凭空诞生的,它的萌芽或胚胎总是或多或少显现于以 ... -
开源技术分析:AOP和Spring事务处理
2008-12-27 22:01 793一.为什么要用框架 ...
相关推荐
C#中StringBuilder类的使用方法 C#中的StringBuilder类是 System.Text 命名空间下的一个类,用于高效地处理和操作字符串。StringBuilder类的出现是为了解决String类的不可变性问题,每次使用String类中的方法时,都...
本文将深入探讨字符串、String类以及StringBuilder类,帮助你更好地理解和应用这些基础知识。 首先,我们关注的是String类。在C#中,String类是不可变的,这意味着一旦一个字符串对象被创建,它的内容就不能被改变...
### String和StringBuilder类的区别 在.NET框架中,`String` 和 `StringBuilder` 是两种非常重要的字符串处理类。尽管它们都能用来表示和操作文本数据,但它们之间存在显著的区别,主要体现在内存使用、性能表现...
Object 类、Date 类、Calendar 类、StringBuilder 类相关知识点总结 Object 类是 Java 中所有类的父类,它提供了一些基本的方法,例如 equals()、toString() 等。equals() 方法用于判断两个对象是否相同,而 ...
《Java中的StringBuffer与StringBuilder类详解》 在Java编程中,当我们需要对字符串进行多次修改时,StringBuffer和StringBuilder类成为首选。这两个类提供了一种高效且灵活的方式来处理字符串,与不可变的String类...
### JavaSE之StringBuilder类与String类 #### 一、String类概述 在Java语言中,`String`类是非常重要的一个类,它代表了不可变的字符序列,即一旦创建了一个`String`对象,其内容就不能被修改。由于`String`类的不...
day09【API、String类、StringBuilder类】 本节课程主要介绍了 API、String 类和 StringBuilder 类的相关知识点。 API 概述 API(Application Programming Interface)即应用程序编程接口,提供了一种访问底层...
Java的StringBuilder类是Java语言中用于处理字符串的一个重要工具,特别是在构建或修改字符串时,它提供了高效的性能。与String类不同,StringBuilder是一个可变的对象,这意味着我们可以在已有的字符串基础上进行...
在Java编程语言中,StringBuffer和StringBuilder类是处理可变字符串序列的重要工具。它们提供了丰富的功能,如添加、插入、删除、替换字符,以及反转字符串序列等。由于这两个类的特性,它们在处理大量字符串操作时...
Object类,日期时间类,System类, StringBuilder类,包装类
Java StringBuilder类原理及常用方法 Java StringBuilder类是一种可变字符序列, 它是一个字符串缓冲区,可以通过某些方法调用改变该序列的长度和内容。StringBuilder内部拥有一个数组用来存放字符串内容,进行字符...
在Java和C#中,StringBuilder可以创造可变字符序列来动态地扩充字符串,那么在C++中我们同样也可以实现一个StringBuilder并且用来提升性能,下面就来详解C++中StringBuilder类的实现及其性能优化
在C#编程中,`StringBuilder`类是一个非常重要的工具,特别是在处理大量文本操作时,它提供了比使用字符串连接更高效的方式。本篇文章将深入探讨如何使用`StringBuilder`类来实现"有选中部分给选中部分加空格"以及...
通过上面的分析,我们可以看到,String类的字符串是不可变的,而StringBuffer和StringBuilder类的字符串可以被修改。StringBuffer类是线程安全的,而StringBuilder类不是线程安全的。 在选择字符串类时,我们需要...
如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。 通过用一个重载的构造函数方法初始化变量,...
例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder类可以提升性能。 通过用一个重载的构造函数方法初始化变量,可以创建 StringBuilder 类的新实例,正如以下示例中所阐释的那样。 设置容量和长度 ...
StringBuilder 是一个高效的字符串处理类,用于处理需要频繁修改的字符串。在 .NET Framework 中,String 对象是不可改变的,每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就...