前言

首先和博园的各位打声招呼,小弟在博园呆了也有一年多了。平常一有时间就会过来看看文章,学习各位的经验,现在养成了一种一天不来博园,心里就不踏实的习惯,不知道在看我博文的大哥们有没有这个感觉。

读归读,理解归理解,所以我现在想把平常所看的,所读的转成自己的理解,记录下来,以便与各位同行们讨论讨论。如果在我博文里有理解错误的,或者没有充分理解的请大胆指出,小弟先在这里拜谢各位了。

  客套话就说到这,下面开始今天的内容。

字符串

  • System.String类

  • System.Text.StringBuilder类

String

  string是各位用的最多的类型之一,是一个特殊的引用类型,直接派生于Object,因此它的值储存在托管堆上。构造一个新字符串的时候,不需要用new。

using System;
class Program
{
static void Main(string[] args)
{
string s = "This is right";//这是正确的
Console.WriteLine(s); string b = new String("This is error");//这是错误的
Console.WriteLine(b);
}
}

  它是”不可变的“。初始化字符串对象后,该字符串对象的长度、内容都是确定不变的了。这个时候,我们需要更改或者添加字符串,会做一个怎样的动作呢?假如会有这一段代码

using System;
class Program
{
static void Main(string[] args)
{
string s = "I am ";
s += "Sky";
Console.WriteLine(s);//我叫Sky
}
}

  1、创建一个新的字符串对象b,运行库会为新对象b分配足够的内存,储存新内容“I am Sky”。

  2、变量 s重新指向新对象b。

  3、旧对象a没有被任何变量引用,等待垃圾回收。

  由于上面的特性,避免复制同一个字符串的多个对象,会利用CLR的字符串留用机制,减少内存的损耗。

  什么是字符串留用,CLR初始化的时候会创建哈希表,每构建一个新字符串都会与哈希表匹配,查找是否有相同的字符串,如果匹配,就会返回这个已存在的旧对象,由新变量进行引用。否则,就会创建一个字符串副本添加到哈希表里,Key就是字符串,Value就是string对象在堆上的地址。

  由上面可见a和b的托管堆上地址是一样的。假如用new呢?经小平子补充,new出来的字符串是不会记录在哈希表的,因此,接下来的字符串与new出来字符串对象是不一样的。

  

StringBuilder

  因为string的”不可变“,导致多次修改字符串的时候会损耗性能,那么这个时候StringBuilder的作用就来了。StringBuilder和String比起来,功能较少,只有基本的属性和增删改的方法。

  其实,StringBuilder是由Char数组构成的。构建新的StringBuilder时能设置容量大小,当添加字符串,超过已分配的数组大小时,就会创建一个新的数组,此时容量会翻倍,旧的数据就会等待垃圾回收。

  StringBuilder多数方法都是返回同一个StringBuilder对象,那么这个时候就可以,几个操作一起完成。

using System;
using System.Text;
class Program
{
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
string s = sb.AppendFormat("{0} {1}", "Skyer", "Chen").Remove(,).Replace(' ','-').ToString();
Console.WriteLine(s);//显示结果 Sky-Chen
}
}

  写到这里快江郎才尽了,小弟知识浅薄,日后若有长进定会补上。第一次写博文格式排版有点烂,我发现在大牛们的格式特别漂亮。。起码标题很显眼,恳求各位哥指点指点。

 

C#系列之String和StringBuilder的更多相关文章

  1. java‘小秘密’系列(一)---String、StringBuffer、StringBuilder

    java'小秘密'系列(一)---String.StringBuffer.StringBuilder 前言:本系列的主题是平时容易疏忽的知识点,只有基础扎实,在编码的时候才能更注重规范和性能,在出现b ...

  2. java基础解析系列(一)---String、StringBuffer、StringBuilder

    java基础解析系列(一)---String.StringBuffer.StringBuilder 前言:本系列的主题是平时容易疏忽的知识点,只有基础扎实,在编码的时候才能更注重规范和性能,在出现bu ...

  3. C#基础知识系列三(类和结构体、String和StringBuilder、equals和==)

    前言 这一节主要来了解一下类和结构体之间的异同点.以及针对String和StringBuilder的用法.equals和==,其实可以看出很多地方都用到了上一节的值类型和引用类型.堆栈和装箱拆箱操作吧 ...

  4. java基础解析系列(九)---String不可变性分析

    java基础解析系列(九)---String不可变性分析 目录 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)---In ...

  5. JDK源码分析-String、StringBuilder、StringBuffer

    String类的申明 public final class String implements java.io.Serializable, Comparable<String>, Char ...

  6. 33-Java中的String,StringBuilder,StringBuffer三者的区别

    转载自:https://www.cnblogs.com/su-feng/p/6659064.html StringBuilder 详解 (String系列之2) Java中的String,String ...

  7. String、StringBuilder、StringBuffer的爱恨情仇

    第三阶段 JAVA常见对象的学习 StringBuffer和StringBuilder类 (一) StringBuffer类的概述 (1) 基本概述 下文以StringBuffer为例 前面我们用字符 ...

  8. java中 String StringBuffer StringBuilder的区别

    * String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...

  9. String,StringBuffer,StringBuilder的区别

    public static void main(String[] args) { String str = new String("hello...."); StringBuffe ...

随机推荐

  1. [原]Unity3D深入浅出 - 物理引擎之碰撞体(Colliders)

    通常Colliders会与Rigidbody一起使用,没有添加碰撞体的刚体会彼此相互穿过. 常用碰撞体有以下几种: Box Collider:盒子碰撞体,是一个立方体外形的碰撞体,可调整为不同大小的长 ...

  2. 存储过程 分页【NOT IN】和【>】效率大PK 千万级别数据测试结果

    use TTgoif exists (select * from sysobjects where name='Tonge')drop table Tongecreate table Tonge( I ...

  3. Web打印控件smsx.cab使用说明

    在项目开发中,经常会用到页面打印的功能,在ASP.NET环境下推荐一款web打印控件smsx.cab.    使用方法:一般会先定义一个用于打印的母版页(Print.Master),在母版页上做好布局 ...

  4. centos nginx 多端口配置过程记录

    1. 编辑 /usr/local/nginx/vhosts/  在此目录下增加一文件,如;ci.ainux.com,或复制一个文件 修改其中的端口和目录,更改log_format 名称 重启nginx ...

  5. Zen Coding support in WebStorm/PhpStorm

    With the last WebStorm/PhpStorm EAP you can edit HTML and CSS code really fast usingZen Coding featu ...

  6. php网页显示正方形图片缩略图

    需求是这样的:原始图片的大小是不定的,类似800*600.1000*756,现有一个页面要以正方形(60*60)显示这些图片,注意:图片只能在内存处理,不能缩小后保存到本地磁盘. 解决办法: html ...

  7. [开发工具] 史上最全系列之开发环境搭建之DDMS

    原文链接:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=275774 一.简介 DDMS 的全称是DalvikDebug Mon ...

  8. -Xms 和 -Xmx 不能设置的太大

    之前我一直有一个疑问,就是-Xms 和 -Xmx不是设置的越大越好吗?现在才明白怎么回事. 通过在命令行中执行 java 或者启动某种基于 Java 的中间件来运行 Java 应用程序时,Java 运 ...

  9. 阿里云centos 安装 nodejs npm express

    yum check-update yum install vsftpdvi /etc/vsftpd/vsftpd.conf anonymous_enable=NO service vsftpd sta ...

  10. hadoop源码导入eclipse

    1,下载hadoop源码 下载链接 http://svn.apache.org/repos/asf/hadoop/common/tags/release-2.2.0/   为2.2.0的源码, 也可以 ...