zoukankan      html  css  js  c++  java
  • string和StringBuilder

    string 字符串

    定义语法:string s=”abc”  string str=new string(new char[]{‘a’,’b’,’c’})

    stringString

    string is an alias for String in the .Net Framework

    string 是String的别名,string是C#的类型,String是.Net Framework的类型

    string经过编译变成String,为了符合语法,建议使用string

    Immutable字符串不变性

    代码分析:

    string s=”abc” 在堆上开辟空间存储变量s的值”abc”,在栈上存储s,将指针指向堆上的地址

    s=”abcd” 在堆上开辟空间存储变量s的值”abcd”,将栈上的s指向的地址指向”abcd”

    由图可知,字符串不变性是指字符串值的变更,原有值并不会立刻从内存中消失,而是等待GC回收,

    因此在有频繁字符串的切割、拼接等字符操作时,应当使用StringBuilder

    Intern Pool 驻留池

    驻留池是指CLR维护的一个HashTable,键为字符串的值,值为字符串在堆中的地址,存储的字符串是

    字面量字符串,当新的字面量字符串新建时,如果驻留池中存在同值字符串,则新的字符串的引用指向该字符串的地址。

    字面量字符串,string str=”abc”  string str=@”abc”  string str=”abc”+”def”

    英文双引号包括的或@+英文双引号包括的

    代码分析:

    string s=”abc” 在堆区开辟空间存储变量s,在栈中存储s,并将引用指向堆中地址

    string b=”abc” 检查驻留池中是否有”abc”,存在,在栈中新建变量b,将引用指向堆

    变量b和s在堆中地址一致,说明驻留池机制也说明了字符串的不变性。

    同时驻留池的存活周期同程序进程一致,为字符串的线程同步提供基础,即驻留池中的字符串是进程级

    string的特殊性==和Equals

    ==和Equals对值类型都是比较栈中值是否相等

    ==对于string外的引用类型,是比较栈中的内容(指向堆中的地址),Equals比较的是堆中的值

    由于string 重载了运算符==,重写了Object的Equals,类似于值类型,==和Equals比较的是堆中的值,

    由于==的底层是Equals,所以在字符串的比较最好用Equals,这样性能更优。

    代码例子中字符串a,b,c,d不论是Equals还是==都是True

    stringStringBuilder

    StringBuilder 动态串,从字面意思来看,StringBuilder是的长度是可以变化的

    StringBuilder是值类型,是为处理复杂频繁的字符串操作而存在的

    代码分析:

    StringBuilder sb=new Stringbuilder(“Hahaha”) 在堆中开辟空间存储变量sb,值为”Hahaha”,在栈中存sb,引用指向堆中地址

    sb.Append(“123”) 根据栈中引用找到堆中地址,当初始分配内存不足,自动扩展,并将存放值变为”Hahaha123”

    由图可看出StringBuilder是对同一块内存操作,而字符串的更改会占用内存,因此对于频繁的字符串操作

    StringBuilder,而对于次数较少用string,因为StringBuilder对内存操作占用CPU,在一定程度上影响性能。

  • 相关阅读:
    ASP.NET MVC 视图
    ASP.NET MVC 控制器
    ASP.NET MVC 入门
    SQL 兼容性设置
    this template attempted to load component assembly 'NuGet.VsiualStudio.interop,version=1.0.0.0 culture=neutral publickeytoken=0000000'. 解决方案
    SQL 时间函数
    [原创]PageOffice+MobOffice 电脑、移动跨平台Office文档在线流转解决方案
    [原创]Java调用PageOffice给Word中的Table赋值
    [原创]Java调用PageOffice在线打开数据库中保存的Word文件
    [原创]新版PageOffice V4.0为什么用弹出窗口的方式打开文件?
  • 原文地址:https://www.cnblogs.com/arvinzd/p/14143912.html
Copyright © 2011-2022 走看看