StringBuilder与String有哪些区别?
System.String具备不可修改性,在程序中这样的特性容易产生性能上的问题。针对这个问题.NET提供的StringBuilder类可以解决类似的问题。
String 和 StringBuilder 对象都可以很方便地处理字符串,它们具备各自的特点,下面将分别进行说明:
System.String具有以下5个特点:
- String是引用类型,在堆上分配内存。
- String对象一旦生成,就不可改变(Immutable)。
- String提供了大量便捷的字符串操作函数。
- String运算时会产生一个新的实例。
- 在程序中定义相等运算符(== 和 !=),可以方便比较 String 对象的值(而不是引用)。
StringBuilder具有以下两个特点:
- StringBuilder对象是动态对象,允许扩充它所封装的字符串中的字符数量。
- StringBuilder可以用于修改StringBuilder中的内容。
由于String对象一旦生成,就不可改变,所以每次使用System.String类中的方法时,都需要在内存中创建一个新的字符串对象,这会分配新的空间给该新的对象。如果对字符串执行重复修改,创建一个新的String对象导致的系统开销可能会非常昂贵。如果不创建新的对象,只是修改字符串,则可以使用StringBuilder类。StringBuilder类型可以很好地解决字符串操作的性能问题,在它生成String对象之前,将不会产生任何String对象。一下示例代码对使用StringBuilder和使用String的性能差异做了比较,代码如下:
using System;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string ID = "ID number";
int number = 20000;
//使用StringBuilder,并记录使用的时间
long sbStart = DateTime.Now.Ticks;
UseStringBuilder(ID, number);
long sbEnd = DateTime.Now.Ticks;
//不实用StringBuilder,并记录使用的时间
long sStrat = DateTime.Now.Ticks;
UseString(ID, number);
long sEnd = DateTime.Now.Ticks;
//输出拼接字符串所花的时间
Console.WriteLine("使用StringBuilder:" + (sbEnd - sbStart).ToString());
Console.WriteLine("使用String:"+(sEnd-sStrat).ToString());
Console.ReadLine();
Console.Read();
}
//使用StringBuilder拼接字符串
static String UseStringBuilder(string ID, int number)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < number; i++)//循环增加字符
{
sb.Append(ID + i.ToString());
}
sb.Remove(sb.Length - 1, 1);
return sb.ToString();
}
//使用string拼接字符串
static String UseString(string ID, int number)
{
string temp = "";
for (int i = 0; i < number; i++)
{
temp += ID + i.ToString();
}
return temp;
}
}
}
实例程序使用String和StringBuilder的运行结果如下:
使用StringBuilder:87891
使用String:23408203
StringBuilder与System.String 相比,他会保留自己的缓冲区。在针对StringBuilder执行字符串操作时,会首先检查缓冲区的大小,看其是否能否容纳新的字符串。如果发现不够,则会增加需要的内存数量,因此可以做到大幅降低内存配置的操作次数,并可以有效提高性能。
在相同字符串的许多操作上,使用StringBuilder类会比使用String对象更有效率。对于少量的字符串拼接的字符操作,使用String类比较方便。.NET对String对象扩展了许多便捷的字符串处理方法。
StringBuilder与String有哪些区别?的更多相关文章
- String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别 (String系列之1)
本章主要介绍String和CharSequence的区别,以及它们的API详细使用方法. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/string01. ...
- C#中 StringBuilder类 与 String类的区别---(转)
在找工作的时候,去了些公司,避免不了要面试和笔试.不过一般最起初的是笔试.我印象中有这样有一道题目:StringBuilder类与 String类的区别?那时候我不太清楚这两个类的区别,今天在看代 ...
- 面试长谈的String,StringBuffer,StringBuilder三兄弟有啥区别
1.String: /** Strings are constant; their values cannot be changed after they * are created. String ...
- String,StringBuilder,StringBuffer三者的区别
参考 String,StringBuilder,StringBuffer三者的区别 这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面. 1.运行速度 首先说运行速度,或者说是执行速 ...
- Java中的String,StringBuilder,StringBuffer三者的区别
最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...
- Java基础 -- String,StringBuilder,StringBuffer三者的区别
结论 1-String,StringBuilder,StringBuffer 之间的区别主要是在两个方面,即运行速度和线程安全这两方面: 首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:St ...
- Java中的String,StringBuilder,StringBuffer三者的区别(转载)
最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...
- 转:Java中的String,StringBuilder,StringBuffer三者的区别
最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...
- [转载]Java中的String,StringBuilder,StringBuffer三者的区别
最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...
随机推荐
- hive复杂类型实战
1.hive 数组简单实践: CREATE TABLE `emp`( `name` string, `emps` array<string>) ROW FORMAT SERDE 'org. ...
- Python:Day14 集合、函数
浅copy只copy一层 深copy相当于克隆一份 深copy要引入copy,具体如下: import copy wife = copy.copy() #此为浅copy,括号中要加copy的对象,相当 ...
- wordpress数据表分析
wordpress一共是有12个表的:|wp_commentmeta || wp_comments || wp_links || wp_options || wp_postmeta || wp_pos ...
- HandlerThread解析
HandlerThread是一种具有消息循环的线程.HandlerThread可以接收消息并处理消息,并执行一些耗时操作,这样UI线程就可以把一些耗时的操作命令发送给HandlerThread,由该线 ...
- SpringMVC自动封装List对象 —— 自定义参数解析器
前台传递的参数为集合对象时,后台Controller希望用一个List集合接收数据. 原生SpringMVC是不支持,Controller参数定义为List类型时,接收参数会报如下错误: org.sp ...
- 抛弃配置后的Spring终极教程
一:前言 Spring 有XML配置和注解两种版本,我个人非常喜欢使用注解,相当热衷Spring boot! 对于Spring,核心就是IOC容器,这个容器说白了就是把你放在里面的对象(Bean)进行 ...
- 配置Nginx虚拟主机
实验环境 一台最小化安装的CentOS 7.3虚拟机 配置基本环境 1. 安装nginx yum install -y epel-* yum isntall -y nginx vim 2. 建立虚机主 ...
- 用commander.js构建自己的脚手架工具
随着前端技术的发展,工程化逐渐成为了一种趋势.但在实际开发时,搭建项目是一件很繁琐的事情,尤其是在对一个框架的用法还不熟悉的时候.于是很多框架都自带一套脚手架工具,在初始化前端项目的时候就可以不用自己 ...
- SQL Server 跨服务器查询
select * from OPENDATASOURCE( 'SQLOLEDB', 'Data Source=10.10.10.10;User ID=sa;Password=123456'). [CF ...
- 网络编程-Socket介绍
Socket介绍 什么是socket?(5分钟) Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议 ...