String 类有不可变性,每次执行操作时都会创建一个新的String对像,需要对该对象分配新的空间。

StringBuilder 解决了对字符串重复修改过程中创建大量对象的问题。初始化一个StringBuilder后,它会自动申请一个默认的StringBuilder容量(16)

这个容量是由Capacity来控制的.并且允许,我们根据需要来控制Capacity的大小,也可以通过Length来获取或设置StringBuilder 的长度.

举例: 用String类这么写

String begin_query = "select UPPER(MachineName) As MachineName, "+"LOWER(MachineOwner) As MachineOwner, Status, "+ "StartTime from NET_STRESS WHERE ";

String end_query = " AND StartTime > '" + startTime + "'AND StartTime < '" + endTime + "'";

String query = begin_query + GetWhereClause("PASSED") + end_query;

用StringBuilder类这么写:

StringBuilder begin_query = new StringBuilder();

begin_query.Append("select UPPER(MachineName) As MachineName ");

begin_query.Append("LOWER(MachineOwner) As MachineOwner, Status, ");

begin_query.Append("StartTime from NET_STRESS WHERE ");

StringBuilder end_query = new StringBuilder();

end_query.Append(" AND StartTime > '");

end_query.Append(startTime);

end_query.Append("' AND StartTime < '");

end_query.Append(endTime);

end_query.Append("'");

String query = begin_query.Append(GetWhereClause("PASSED")).Append(end_query).ToString();

StringBuilder 类的一些属性与方法

--------------------------------------------------------------------------------

Length 属性并不是只读的。

StringBuilder sb=new StringBuilder("I live the language");

Console.WriteLine(sb.ToString( ));

sb.Length = 6;

//Displays "I live"

Console.WriteLine(sb.ToString( ));

Capacity 属性

描述:当前为实例分配的字符数量。默认容量是16,如果将一个字符串作为参数提供给构造函数,容量以最接近 2 的幂的值。

MaxCapacity 属性

描述:这个实例中可以被分配的字符最大数量。

Append( ) 方法

描述:追加给定值的字符串表示。

StringBuilder sb=new StringBuilder( );

Console.WriteLine( sb.Capacity+"/t"+sb.Length );

sb.Append ( 'a' , 17 )

Console.WriteLine( sb.Capacity+"/t"+sb.Length );

16      0 <== 输出

32      17

EnsureCapacity( Int capacity ) 方法

描述:如果当前容量小于指定容量,内存分配会增加内存空间以达到指定容量。

Replace( Char oldchar,Char newchar ) 方法

描述:用newchar替换oldchar。

Replace( String oldstring,String newstring ) 方法

描述:用newstring替换oldstring。

Replace( Char oldchar,Char newchar,Int startpos,Int count ) 方法

描述:从startpos到count-1之间用newchar替换oldchar。

Replace( String oldstring,String newstring,Int startpos,Int count )

描述:从startpos到count-1之间用newstring替换oldstring。

ToString( ) 方法

StringBuilder sb=new StringBuilder( "I live this game" );

String s1=sb.ToString( );         //Displays "I live this game"

String s2=sb.ToString(3,4);     //Displays "live"

在这里第二个ToString( )方法调用了String类的Substring( )方法

public String ToString( int startIndex,int length )

{

return m_StringValue.Substring( startIndex,length );

}

String和StringBuilder 的使用区别的更多相关文章

  1. final,finally,finalize有什么区别?String, StringBuffer, StringBuilder有什么区别?Exception和Error有什么区别?

    继上篇JVM学习之后,后面将分三期深入介绍剩余JAVA基础面试题,每期3题. 题目一.final,finally,finalize有什么区别? /*请尊重作者劳动成果,转载请标明原文链接:*/ /* ...

  2. JAVA基础之——String、StringBuilder、StringBuffer区别和使用场景

    本文主要讲解String.StringBuilder.StringBuffer区别和应用场景 本文以jdk1.8为例 1 String 操作过程:每次赋值时新建一个String对象. 2 String ...

  3. (转)String,StringBuilder,StringBuffer区别

    Java中的String,StringBuilder,StringBuffer三者的区别 注:转自-博客园-酥风 最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuild ...

  4. String,StringBuilder,StringBuffer区别

    一.String,StringBuilder,StringBuffer的大概了解 大家知道String,StringBuilder,StringBuffer三个的基本应用场景. String会一直创建 ...

  5. java中String,StringBuffer,StringBuilder之间的区别

    文章转载自:http://www.cnblogs.com/frankliiu-java/archive/2010/07/05/1771537.html String是固定长度的字符串,如果要发生变化必 ...

  6. String StringBuffer StringBuilder 之间的区别

    StringBuffer与StringBuilder的区别: StringBuffer是jdk1.0版本出来的,线程安全,效率低 StringBuilder是jdk1.5版本出来的,线程不安全,效率高 ...

  7. String、StringBuilder、StringBuffer 区别

    public static void testStringBuffer(){ long start System currentTimeMillis(); StringBuffer sbuf = ne ...

  8. String 与StringBuilder有什么区别

    C# String 对象是不可改变的.每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间.在需要对字符串执行重复修改的情况下,与 ...

  9. java中String、stringbuilder、stringbuffer区别

    1.可变与不可变 String类中使用字符数组保存字符串,如下就是,因为有"final"修饰符,所以可以知道string对象是不可变的.每次对String对象进行改变的时候其实都等 ...

随机推荐

  1. WebApi2官网学习记录---Html Form Data

    HTML Forms概述 <form action="api/values" method="post"> 默认的method是GET,如果使用GE ...

  2. 正则去掉html标签

    return System.Text.RegularExpressions.Regex.Replace(HTMLStr, "<[^>]*>", "&qu ...

  3. Android的启动模式

    启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的<Activity>标签的android:launchMode属性设置: 启动模式有4种,分别 ...

  4. java二维不定长数组测试

    package foxe; import javax.swing.JEditorPane;import javax.swing.JFrame; /** * @author fooxe * * @see ...

  5. 定义block块

    一: 工程图 二: 代码区 AppDelegate.h #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <U ...

  6. MySQL在Linux系统下配置文件详解

    在日常的的开发过程中接触到了SQLServer和MySQL数据库的操作性问题,可能是以前接触的都是SQL Server,才开始接触MySQL,总感觉使用MySQL没有使用SQLserver那么顺手,一 ...

  7. C++内存对象布局

    本章主要介绍了c++类中成员变量.函数对象的在内存中布局. 当c++类中不包含virtual机制类的函数时,内部nostatic member被包含在每一个class object之中,就想c str ...

  8. paip输入法编程之生活用高频字,以及汉字分级

    paip输入法编程之生活用高频字 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn.net/attilax ...

  9. iphone手机端图片错位修正的js代码

    <script type="text/javascript"> $(function(){ // 获取终端的相关信息 var Terminal = { // 辨别移动终 ...

  10. 编写优秀jQuery插件的10个技巧

    前言:在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行 ...